def midpoint(p1, p2):
"""
PRE: p1 and p2 are Point objects (from the graphics module)
POST: a new Point equidistant from and co-linear with p1 and p2
is computed and returned
使用以下规范编写函数中点
答案 0 :(得分:10)
您使用的是什么图形模块? (pypi包含几十个,没有一个名为'graphics')Point的界面是什么样的?
如果Point已命名属性(如p.x,p.y等),您可以执行类似
的操作def midpoint(p1, p2):
return Point((p1.x+p2.x)/2, (p1.y+p2.y)/2)
如果Point可以作为列表访问(如p [0],p [1]等),你可以改为
def midpoint(p1, p2):
return Point((p1[0]+p2[0])/2, (p1[1]+p2[1])/2)
如果Point有点加法和标量除法或乘法重载,你可以做
def midpoint(p1, p2):
return (p1+p2)/2 # or *0.5
(虽然严格来说,添加两个点应该没有意义,从另一个点减去一个点会给你一个矢量 - 因此
def midpoint(p1, p2):
return p1 + (p2-p1)/2 # or *0.5
答案 1 :(得分:4)
你的编写方式与编写任何其他函数的方式相同:
def midpoint(x1, y1, x2, y2):
return ((x1 + x2)/2, (y1 + y2)/2)
或类似的东西。这取决于您是将点表示为单个坐标还是对象或列表等。
答案 2 :(得分:3)
自己计算一下吗?
两点之间的中间点是他们的平均值。也就是说,
P_mid = (P1 + P2) / 2
由你决定如何表示“点”。它可以是2D,3D甚至是nD。您可能希望实施__add__
和__div__
以及其他“数字”操作。
答案 3 :(得分:2)
如何使用Numpy?
如果点数由numpy.array表示,则它们的维度无关紧要。
例如,考虑2D。
import numpy as np
x = np.array([-1, -1])
y = np.array([1, 1])
mid1 = (x + y)/2
# or
mid2 = np.mean([x, y])
NumPy是使用Python进行科学计算所需的基本软件包。
答案 4 :(得分:1)
from __future__ import division
def midpoint(p1, p2):
if len(p1) != len(p2):
raise TypeError('Points are from differing dimensions')
return map(lambda (e1, e2): (e1 + e2) / 2, zip(p1, p2))
由于似乎没有人真正回答你想要的形式的问题(除了我;)
),这里是2维点的简化版本:
def midpoint(p1, p2):
return (p1[0] + p2[0]) / 2, (p1[1] + p2[1]) / 2
答案 5 :(得分:1)
我假设问题是关于名为graphics
的模块中的“Point”对象。
根据我在参考文献中提供的文档,Point类有getX()
和`getY()访问器来分别获取点的X和Y坐标。
所以解决方案可能就像这样
def midpoint(p1, p2):
mx = (p1.getX() + p2.getX())/2.0
my = (p1.getY() + p2.getY())/2.0
return Point(mx,my)
或
def midpoint(p1,p2):
l = Line(p1,p2)
return l.getCenter()
参考 - http://mcsp.wartburg.edu/zelle/python/graphics/graphics.pdf