二维点类表示笛卡尔坐标和极坐标。
point2d的Python项目详细描述
点2d
point2d
模块只包含在类:Point2D
上。
此类描述二维点的笛卡尔坐标和极坐标。它同时用笛卡尔坐标和极坐标表示二维空间中点(向量)的行为,以便这些点(向量)可以互换使用。更改一个坐标将更改另一个坐标的值,即更改笛卡尔坐标时,极坐标将重新计算,反之亦然。
不需要调用任何方法来重新计算任何坐标,这是自动完成的,例如,如果设置了新的x
,r
和a
将被更新。
安装
从这个文件夹运行python setup.py install
。
用法
您可以通过point2d.Point2D
或from point2d import Point2D
使用该类,并直接从代码中使用Point2D
。
属性
Point2D
类具有由x
和y
表示的笛卡尔坐标,以及由r
和a
表示的极坐标(半径和角度)。如果更改x
或y
的值,则r
和a
将自动更新,反之亦然。
创建点2d
创建点2d有五种方法:
- 没有任何争论。这将初始化为点(0,0)。
>>>Point2D()Point2D(0.0,0.0)(0.0,0.0)
- 以
x
和y
作为单独的参数。
>>>Point2D(-1.0,0.0)Point2D(-1.0,0.0)(1.0,3.141592653589793)
- 把
x
和y
作为一个元组。
>>>Point2D((-1.0,0.0))Point2D(-1.0,0.0)(1.0,3.141592653589793)
- 以
r
和a
作为单独的参数。
>>>Point2D(r=1.0,a=math.pi)Point2D(-1.0,1.2246467991473532e-16)(1.0,3.141592653589793)
- 复制另一个点2d:
>>>Point2D(Point2D(-1.0,0.0))Point2D(-1.0,0.0)(1.0,3.141592653589793)
功能
如前所述,类自动跟踪笛卡尔坐标和极坐标。
>>>p=Point2D()>>>print(p)Point2D(0.0,0.0)(0.0,0.0)>>>p.x=-1.0>>>print(p)Point2D(-1.0,0.0)(1.0,3.141592653589793)>>>p.r=5.0>>>print(p)Point2D(-5.0,6.123233995736766e-16)(5.0,3.141592653589793)
类还实现了点之间的操作(它们返回一个新的点2d)。
>>>p1=Point2D(10.0,0.0)>>>p2=Point2D(0.0,10.0)>>>p1+p2Point2D(10.0,10.0)(14.142135623730951,0.7853981633974483)>>>p1-p2Point2D(10.0,-10.0)(14.142135623730951,-0.7853981633974483)
如果您这样做,可以通过点之间的和或减来更新点:
>>>p1+=p2>>>p1Point2D(10.0,10.0)(14.142135623730951,0.7853981633974483)>>>p1-=p2>>>p1Point2D(10.0,0.0)(10.0,0.0)
该类还实现了点和标量之间的操作。
>>>Point2D(1.0,0.0)*10Point2D(10.0,0.0)(10.0,0.0)
获取和设置
您可以直接通过坐标的名称(x
,y
,r
,a
)来获取和设置坐标值,但是有一些有用的方法可以帮助您实现。
笛卡尔坐标
cartesian()
方法可以设置或返回笛卡尔坐标。可以使用x
和y
作为单独的参数设置它们,使用包含x
和y
的元组,或者使用此方法获取包含x
和y
的元组。
>>>p=Point2D()>>>p.cartesian(1.0,0.0)>>>pPoint2D(0.0,0.0)(0.0,0.0)>>>p.cartesian((-1.0,0.0))>>>pPoint2D(-1.0,0.0)(1.0,3.141592653589793)>>>p.cartesian()(-1.0,0.0)
您还可以使用方法ints()
来获得具有笛卡尔坐标的整数元组。如果您使用的是pygame,这一点尤其有用。
极坐标
polar()
方法对极坐标做同样的事情。您可以使用r
和a
作为单独的参数设置它们,使用包含r
和a
的元组,或者使用此方法获取包含r
和a
的元组。
>>>p=Point2D()>>>p.polar(1.0,0.0)>>>pPoint2D(1.0,0.0)(1.0,0.0)>>>p.polar((1.0,math.pi))>>>pPoint2D(-1.0,1.2246467991473532e-16)(1.0,3.141592653589793)>>>p.polar()(1.0,3.141592653589793)
有用的技巧
您可以在这个类中单独使用笛卡尔坐标,它仍然很有用。这里有一些不错的“把戏”。
向量的长度
记住,在极坐标系中,一个点的半径是它到原点的距离,这与位于原点的向量的长度相同。
用mypoint.r
来找出它的长度。
>>>p=Point2D(3,4)>>>p.r5.0
点之间的距离
减去两点会得到第三个点。第三个点的长度是第一个点之间的距离。使用它的半径来获取长度。
>>>p1=Point2D(10,0)>>>p2=Point2D(10,10)>>>(p2-p1).r10.0
矢量之间的角度
同样,减去两个向量将得到第三个向量。第三个向量的角度是两个第一个向量之间的角度。不过,要小心,p1 - p2
和p2 - p1
不一样。尽管它们会产生附加角(它们的总和是180°)。
>>>p1=Point2D(10,0)>>>p2=Point2D(10,10)>>>math.degrees((p2-p1).a)90.0>>>math.degrees((p1-p2).a)-90.0
缩放向量
有两种方法是的。其中之一是将矢量乘以描述其比例因子的数字。另一种方法是用半径乘以数字。
>>>p=Point2D(1,0)>>>p*=3>>>pPoint2D(3.0,0.0)(3.0,0.0)>>>p=Point2D(1,0)>>>p.r*=3>>>pPoint2D(3.0,0.0)(3.0,0.0)
单位向量
单位向量是1级向量。要找到一个向量的单位向量,你需要乘以它的长度,这可能有点烦人。好吧,现在很容易。把它的半径设为1就可以了。不客气。
>>>p=Point2D(12.34,56.78)>>>p.r=1>>>pPoint2D(0.21237248410903914,0.9771887883072318)(1.0,1.3567941381565736)
链接
代码:https://github.com/SplinterDev/point2d/
许可证:GNU General Public License v3.0
创建人:Fabrício J.C. Montenegro(2018)