已知直线上两个端点坐标,求任意等分点坐标,用什么方法或模块能实现?
按比例算就可以了,有什么问题吗》?
大概写了下三等分的,没写过python
等分计算方式本身是很简单的,你看下就应该能明白
ax = 5
ay = 10
bx = 50
by = 20
print ("第一个等分点:"),ax+(bx-ax)/3, ay+(by-ay)/3
print ("第二个等分点:"),ax+(bx-ax)*2/3, ay+(by-ay)*2/3
用列表推导式,等下给你代码
'''
已知直线上两个端点坐标,求任意等分点坐标
'''
X1 = float(input('请输入第一个点坐标 x1:'))
Y1 = float(input('请输入第一个点坐标 y1:'))
X2 = float(input('请输入第二个点坐标 x2:'))
Y2 = float(input('请输入第二个点坐标 y2:'))
N = int(input('请输入等分份数 n:'))
'''
根据两点公式:
(x-x1)/(x2-x1)=(y-y1)/(y2-y1)
'''
def f(x):
y = (Y1*(X2-X1)+(x-X1)*(Y2-Y1))/(X2 - X1)
return y
AX = X2 - X1
AX = AX/N
for i in range(1,N):
print('x%d = %5.3f'%(i,(X1+i*AX)),'y%d = %5.3f'%(i,f((X1+(i*AX)))))
/// <summary>
/// 将直线对等分
/// </summary>
/// <param name="Start">起点</param>
/// <param name="End">终点</param>
/// <param name="OutPoint">返回等分点坐标(包括起点和终点)</param>
/// <param name="Count">除起点和终点外的等分点数量</param>
public void IOR_CalcAverageDivideLine(Point Start, Point End, out List<Point> OutPoint, int Count = 5)
{
OutPoint = new List<Point>();
Count += 1;
for (int i = 0; i <= Count; i++)
{
OutPoint.Add(new Point(Start.X + i * (End.X - Start.X) / Count, Start.Y + i * (End.Y - Start.Y) / Count));
}
}