我从很远的地方开始解释我的问题,这样您就可以提出完全不同的方法并理解定制对象和函数。 多年来,我记录了许多自行车的GPS轨迹(.gpx)。我决定将这些(大部分是重叠的)轨迹合并到一个大图形中,并合并/删除大部分轨迹点。到目前为止,我已经成功地简化了轨迹(gpxpy模块中的特性,它删除了大约90%的轨迹点,同时保留了角点的位置),并将它们加载到我当前的程序中。在
当前的python3程序包括加载gpx轨迹和优化图形和四次扫描。我的计划步骤如下:
在我的程序中,我开始用0计算步数,因为第一步只是打开和解析文件。Stackoverflow不允许我从0开始订购。在
为了存储图形,我有一个字典punktid(爱沙尼亚语中的points),其中punkt(point)对象存储在key uid/ui(惟一ID)。唯一ID也存储在点本身中。在第2步和第3步中使用权重属性来计算点的平均值,同时考虑之前的合并。在
class punkt:
def __init__(self,lo,la,idd,edge=set(),ele=0, wei=1):
self.lng=lo #Longtitude
self.lat=la #Latitude
self.uid=idd #Unique ID
self.edges=edge #Set of neighbour nodes
self.att=ele #Elevation
self.weight=wei #Used to get weighted average
>>> punktid
{1: <__main__.punkt object at 0x0000006E9A9F7FD0>,
2: <__main__.punkt object at 0x0000006E9AADC470>, 3: ...}
>>> punktid[1].__dict__
{'weight': 90, 'uid': 9000, 'att': 21.09333333333333, 'lat': 59.41757, 'lng': 24.73907, 'edges': {1613, 1218, 1530}}
如您所见,在清理中有一个小错误,uid没有更新。我已经修好了,但我把它放在里面了,这样你们就可以看到图形的比例了。punktid的最大指数为1699/11787。在
假设我有3个点:A、B和C(在下面的代码片段中分别是I、lyhem(2)和lyhem(0)。A与B和C具有公共边,但B和C可能没有公共边。C比B更接近A。为了减小图的大小,我想把C移到边AB附近(同时考虑B和C的权重),并将AB重定向到C
我想出的解决方案是在AB上找到最接近C的临时点D,然后找到D和C之间的加权平均值,将其保存为E,并将所有C边和AB重定向到该点。Simplified figure-注意,E=(C+D)/2并不完全准确。我不能添加两个以上的链接,但我有额外的2个图片说明我的问题。在
最大的问题是找到D的坐标。我在Mathematica网站上找到了possible solution,但它包含了±号,因为在寻找坐标时有两个可能的坐标。但我有一条线,点在哪里。总之,我不知道如何正确实现它,我的代码变得相当混乱:
^{pr2}$这是一个代码段,由于缺少变量/函数,在复制粘贴后可能不会运行。在第3个if语句中的第22行到第43行,从开始if sin(b)*lyhem[1]<r
到{
清楚地说明问题:如果线段的两个坐标(AC)和这些点上的角度已知(ACB角度应为90度),如何在射线(AB)上找到点?如何在python3.5中实现它?在
PS.(Meta)如果有人需要完整的源,我如何提供它(上传单个文本文件而不注册)?在这里粘贴还是粘贴?如果我上传到其他网站,如何提供链接,如果新手用户被限制在两个?在
目前没有回答
相关问题 更多 >
编程相关推荐