我想在python + matplotlib中同时绘制数百个2D三角形(带标签),所以我将这些三角形放在一个列表中:
三角形= [(label_1,A,B,C),(label_2,D,E,F),...]
这里(标签,A,B,C),A,B,C是三角形的三个顶点,因此它们就像(x,y)那样的实数对,而标签可能是一个字符串(三角形的颜色或名称
现在问题出现了:我如何告诉python A =(x,y)是平面中的一个点,而不仅仅是“两个元素的元组”? 由于我需要执行“A + 0.2 * B”操作,这会导致错误:“不能将序列乘以'int'类型的非int
提前致谢!
答案 0 :(得分:4)
您可以创建自定义Point
类,并定义添加和乘法的行为:
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def __mul__(self, value):
return Point(self.x*value, self.y*value)
def __rmul__(self, value):
return self.__mul__(value)
def __add__(self, other):
return Point(self.x+other.x, self.y+other.y)
def __repr__(self):
return "Point({}, {})".format(self.x, self.y)
a = Point(1,2)
b = Point(23, 42)
x = a + 0.2 * b
print x
#result: Point(5.6, 10.4)
答案 1 :(得分:1)
为什么不使用python对复数的支持?您可以将复数视为平面中的点(Argand平面)。
演示复数乘法:
>>> (3+4j) + 0.2*(5+7j) #Use "j" instead of "i" in python
(4+5.4j)
顺便说一下,你的三角形看起来像是:
triangles = [
("label1", 3+4j, 5+6j, 7+8j),
("label2", 1+2j, 2+3j, 4+5j),
#...
]