如何计算两个给定点和给定距离之间的点?

我有A (35.163 , 128.001)A (35.163 , 128.001)B (36.573 , 128.707)B (36.573 , 128.707)

我需要计算点在A点和B点之间的点

使用2点之间的标准距离公式,我发现D = 266.3

线AB内的每个点(黑点p1,p2,… p8)以相等的距离d = D / 8 = 33.3分开

我如何计算p1,p2,… p8的X和Y?

欢迎使用Java或C#语言的示例

或者只是指出一个公式或方法会做。

谢谢。

**上述计算实际上用于计算地图中阴影级别的虚拟点,并用于阴影区域插值目的*

找到A和B之间所有点的X和Y.

Straitforward三角解决方案可能是这样的:

 // I've used Tupple to represent a point; // You, probably have your own type for it public static IList> SplitLine( Tuple a, Tuple b, int count) { count = count + 1; Double d = Math.Sqrt((a.Item1 - b.Item1) * (a.Item1 - b.Item1) + (a.Item2 - b.Item2) * (a.Item2 - b.Item2)) / count; Double fi = Math.Atan2(b.Item2 - a.Item2, b.Item1 - a.Item1); List> points = new List>(count + 1); for (int i = 0; i <= count; ++i) points.Add(new Tuple(a.Item1 + i * d * Math.Cos(fi), a.Item2 + i * d * Math.Sin(fi))); return points; } ... IList> points = SplitLine( new Tuple(35.163, 128.001), new Tuple(36.573, 128.707), 8); 

结果(分):

 (35,163, 128,001) // <- Initial point A (35,3196666666667, 128,079444444444) (35,4763333333333, 128,157888888889) (35,633, 128,236333333333) (35,7896666666667, 128,314777777778) (35,9463333333333, 128,393222222222) (36,103, 128,471666666667) (36,2596666666667, 128,550111111111) (36,4163333333333, 128,628555555556) (36,573, 128,707) // <- Final point B 

这很容易,但你需要一些数学知识。

  PointF pointA, pointB; var diff_X = pointB.X - pointA.X; var diff_Y = pointB.Y - pointA.Y; int pointNum = 8; var interval_X = diff_X / (pointNum + 1); var interval_Y = diff_Y / (pointNum + 1); List pointList = new List(); for (int i = 1; i <= pointNum; i++) { pointList.Add(new PointF(pointA.X + interval_X * i, pointA.Y + interval_Y*i)); } 

从分量B中减去A,得到从A到B的向量。将该向量乘以所需的步长值并将其加到A.(注意,如图所示,有8个中间步骤,步距为1.0 / 9.0。)这样的事情,假设你真的想要七分:

 vec2 A = vec2 (35.163, 128.001); vec2 B = vec2 (36.573, 128.707); vec2 V = B - A; for (i = 1; i < 8; i++) { vec2 p[i] = A + V * (float)i / 8.0; } 

(对不起,不知道任何Java或C#。)

设A是点(x a ,y a ),B是点(x b ,y b

alpha = tan -1 ((y b – y a )/(x b – x a ))

p1 =(x a + d * cos(alpha),y a + d * sin(alpha))

p k =(x a + kd * cos(alpha),y a + kd * sin(alpha)),k = 1到7

(一种等效的方法是使用矢量运算)

  • 首先找到AB线的斜率。 从这里获得帮助和公式: http : //www.purplemath.com/modules/slope.htm

  • 然后考虑一个Ap1E的三角形(认为有一个点E是A的右边,下面是p1)。

  • 你已经知道角度AEp1是90度。 你已经计算出角度p1AE(从AB的斜率)。
  • 现在找到AE和Ep1。

  • Xp1 = Xa + AE和Yp1 = Ya + Ep1

这在C#或java中并不是很难。 一旦理解了逻辑,就会发现以自己的方式实现快乐。