所以我有100个字典的数据,其中包括X和Y的值,这些数据代表了从比赛开始到结束的坐标。
从这些数据中,我得到了
MaxX, MaxY, MinX, MinY
以计算出椭圆形障碍物需要建造的位置。根据一个人在比赛中的位置,结果如下所示。
enter image description here
正如你可以在照片中看到的,所有4(红色)点使用上述变量显示的最大部分,它可以击中。绿色代表赛车,我正试图使一个outter椭圆形周围和一个inner椭圆形内。
其他数据显示其他赛车,我没有包括保持简单,但变量提供所有数据的最大值和最小值。
绿色不得超出外部椭圆或进入内部椭圆。
我们的想法是画一条赛道,这是用python和matplotlib完成的。
红点的显示方式:
plt.grid()
plt.plot(minX,maxY,'ro')
plt.plot(maxX,minY,'ro')
plt.plot(minX,minY,'ro')
plt.plot(maxX,maxY,'ro')
如何展示比赛(绿色):
for x in dicData:
if x["I"][-2::] == "03":
v = conversion(x["X"],x["Y"])
plt.scatter(v[0], v[1], color = "green")
plt.pause(0.01)
If语句检查某个赛车的数据。
数据被转换成X和Y坐标,就像数据来自GPS一样,所以首先给出lon和lan,然后把这些数据画到图上。
一旦我弄清楚了如何画出一条赛道,我就会换成matplotlib动画。目前我只是在循环中完成了它。
我不知道如何计算,也不知道该怎么做来创建这种形状。这是因为它是对角线,使我非常困难。
编辑:
IMG〉〉IMG
由于所有的帮助,我已经设法得到这个形状使用的点。然而,从图像中你仍然可以看到一些点仍然土地上的线,所以我想使郊区略大eidog 1%大,以阻止这一点。
这是我用过的代码。点代表了赛车所经过的所有坐标的所有x和y值。
hull = ConvexHull(points)
fig, ax1 = plt.subplots(figsize =(12,8))
ax1.set_title('The Race')
for simplex in hull.simplices:
print(simplex)
ax1.plot(points[simplex, 0], points[simplex, 1], 'c')
任何帮助放大它,使点更清晰,也将非常感谢:)
附加编辑
我现在已经设法创建了我想要的感谢布罗克布朗!!然而现在我想创建一条线,通过这两个形状。例如,看看这个x1c 0d1x。在红线顶部(尖的部分),我有坐标创建第一个点,但我坚持在第二个。
这是因为第二个点需要穿过红点到达蓝线。
使用代码创建蓝色圆圈:
hull = ConvexHull(points)
# find middle point
centerX = np.mean(hull.points[hull.vertices,0])
centerY = np.mean(hull.points[hull.vertices,1])
points = shrink_points(points, (centerX,centerY), 1.02)
hull = ConvexHull(points)
fig, ax1 = plt.subplots(figsize =(12,8))
ax1.set_title('The Race')
for simplex in hull.simplices:
ax1.plot(points[simplex, 0], points[simplex, 1], 'c')
所以理想情况下,我想找到红点的坐标,我可以用它来连接红线。
这已经成为挑战,因为我增加了蓝线,所以坐标是不同的
第一节第一节第一节第二节第一节
1条答案
按热度按时间qmelpv7a1#
至于外部,你可能会寻找一个convex hull,对于内部,你可能会围绕中心收缩船体,直到它不包含任何点。
如果形状必须是椭圆形,那么你就面临着一个优化问题。你可以尝试evolutionary algorithm,用你的条件作为适应度函数。生物的特征应该是椭圆的宽度和高度,以及椭圆的旋转。适应度函数可以是:计算外部椭圆的适合度时,计算椭圆内部的点数。如果点数等于总点数,则为每个点的得分加上1/distance_from_the_oval。计算内部椭圆的适合度时,计算椭圆外部的点数。如果点数等于总点数,然后为每个点加上1/distance_from_the_oval以最小化该距离。
我可能今晚某个时候回来再看一眼这个。祝你好运!