如何计算两个给定点和给定距离之间的点?
我有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#语言的示例
或者只是指出一个公式或方法会做。
谢谢。
**上述计算实际上用于计算地图中阴影级别的虚拟点,并用于阴影区域插值目的*
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中并不是很难。 一旦理解了逻辑,就会发现以自己的方式实现快乐。