我使用了以下代码:
import matplotlib.pyplot as plt
import math
# Function to calculate distance between two points
def distance(p1, p2):
return math.sqrt((p1[0] - p2[0])**2 + (p1[1] - p2[1])**2)
# Read points from file
points = []
with open("coord.txt", "r") as file:
for line in file:
x, y = map(int, line.strip().split())
points.append((x, y))
# Initialize lists to store connected points and points yet to connect
connected_points = [points[0]]
points_to_connect = points[1:]
# Connect the nearest point until all points are connected
while points_to_connect:
# Find the nearest point to the last connected point
last_point = connected_points[-1]
nearest_point = min(points_to_connect, key=lambda p: distance(last_point, p))
# Move the nearest point from points_to_connect to connected_points
points_to_connect.remove(nearest_point)
connected_points.append(nearest_point)
# Plotting points and connecting them with lines
plt.scatter(*zip(*points), color='red') # Plots the points
for i in range(len(connected_points) - 1): # Connects the points with a line
plt.plot(*zip(*connected_points[i:i+2]), color='blue')
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Connecting Nearest Points')
# Showing the plot
plt.grid(True)
plt.show()
连接我有坐标的点。代码对某些坐标文件非常有效,但对我需要的坐标不起作用,它错过了一个点,并将该点连接到第一个点。
我想做的是,有代码读取一个有三列的文本文件,绘制第二列与第三列的数据,并将每两个连续的点相互连接。我想用一组点制作一条曲线。我的数据看起来像这样:第二列和第三列是点的坐标(从另一个模拟输出)
(0 149.69331627188203 65.34321553470865)(0 149.7019081389601 70.37384784896992)
有人能帮我吗?这段代码对于一个有整数值的坐标集非常有效。
我也尝试了这里的解决方案:Fitting a closed curve to a set of points
但仍然有同样的问题。
图中附有两张快照以供参考。
1条答案
按热度按时间wwwo4jvm1#
我认为问题就在这里:
你假设“coord.txt”的最后一个点也是曲线的最后一个点,但也许不是。(我没有数据,所以我不确定)
也许你的算法是从黑色圆圈(文件txt的最后一个点)开始,并连接红色箭头后面的所有点。
你可以做的是检查以下顺序:
1.选择要研究的点
1.查找距离步骤0中的点最近的点
1.从步骤0中的点查找第二个最近的点
1.如果第2步中的点更接近第1步中的点而不是第0步中的点,那么您将找到曲线的尾部(或您希望开始连接点的点)