python求线段长度_如何用python求线段长度

我想用Python计算线段的长度(任意数量)。我使用了下面的代码,但是我遇到元组不能将减法作为操作数。我怎样才能克服呢?我想知道我是否错过了任何重要的Python概念。在from itertools import starmap

import math

class Point(object):

def __init__(self,x,y):

self.x=x

self.y=y

def move(self,dx,dy):

self.x+=dx

self.y+=dy

class LineString(object):

def __init__(self,*args): # A method with any number of arguments, args

self.args=[Point(*args) for p in args] # A list of Points

def length(self):

pairs=zip(self.args, self.args[1:])

return sum(starmap(distance,pairs))

def distance(p1, p2):

a = p1.x,p1.y

b = p2.x,p2.y

print (math.sqrt((a[0]-b[0])**2-(a[1]-b[1])**2))

# calculates distance between two given points p1 and p2

return math.sqrt((a** 2)+ (b** 2))

if __name__ == '__main__':

# Tests for LineString

# ===================================

lin1 = LineString((1, 1), (0, 2))

assert lin1.length() == sqrt(2.0)

lin1.move(-1, -1) # Move by -1 and -1 for x and y respectively

assert lin1[0].y == 0 # Inspect the y value of the start point.

# Implement this by overloading __getitem__(self, key) in your class.

lin2 = LineString((1, 1), (1, 2), (2, 2))

assert lin2.length() == 2.0

lin2.move(-1, -1) # Move by -1 and -1 for x and y respectively

assert lin2.length() == 2.0

assert lin2[-1].x == 1 # Inspect the x value of the end point.

print ('Success! Line tests passed!')


版权声明:本文为weixin_28947723原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。