matplotlib 绘制一个椭圆形来表示给定数据的赛道

gudnpqoy  于 2023-03-19  发布在  其他
关注(0)|答案(1)|浏览(124)

所以我有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')

所以理想情况下,我想找到红点的坐标,我可以用它来连接红线。
这已经成为挑战,因为我增加了蓝线,所以坐标是不同的
第一节第一节第一节第二节第一节

qmelpv7a

qmelpv7a1#

至于外部,你可能会寻找一个convex hull,对于内部,你可能会围绕中心收缩船体,直到它不包含任何点。
如果形状必须是椭圆形,那么你就面临着一个优化问题。你可以尝试evolutionary algorithm,用你的条件作为适应度函数。生物的特征应该是椭圆的宽度和高度,以及椭圆的旋转。适应度函数可以是:计算外部椭圆的适合度时,计算椭圆内部的点数。如果点数等于总点数,则为每个点的得分加上1/distance_from_the_oval。计算内部椭圆的适合度时,计算椭圆外部的点数。如果点数等于总点数,然后为每个点加上1/distance_from_the_oval以最小化该距离。
我可能今晚某个时候回来再看一眼这个。祝你好运!

相关问题