如何编写一个函数来计算python中2点之间的中点?

时间:2011-02-18 23:49:30

标签: python

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

使用以下规范编写函数中点

6 个答案:

答案 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进行科学计算所需的基本软件包。

访问http://numpy.scipy.org/

答案 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))

Update0

由于似乎没有人真正回答你想要的形式的问题(除了我;)),这里是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