考虑笛卡尔坐标系中的一条线AB。线的长度是d。
我需要的:
我想在 B 点画一个箭头,来表示线的方向。
我尝试了什么:
我在 B 的一些 x 点之前找到了一个点 C,它位于线 AB 中。然后我试图找到相对于线 CB 成 90 度的点 (P & Q)。但这对我不起作用。
参考这张图片: 除了做这个复杂的步骤,还有没有其他方法可以找到线的方向以在正确的方向上绘制正确的箭头?
请记住,这条线可能位于任何方向。我所拥有的只是 A 点和 B 点。
考虑笛卡尔坐标系中的一条线AB。线的长度是d。
我需要的:
我想在 B 点画一个箭头,来表示线的方向。
我尝试了什么:
我在 B 的一些 x 点之前找到了一个点 C,它位于线 AB 中。然后我试图找到相对于线 CB 成 90 度的点 (P & Q)。但这对我不起作用。
参考这张图片: 除了做这个复杂的步骤,还有没有其他方法可以找到线的方向以在正确的方向上绘制正确的箭头?
请记住,这条线可能位于任何方向。我所拥有的只是 A 点和 B 点。
我不认为如何在一行中找到点 - 目标 c 中给出的答案?太复杂了。你可以通过使用而不是对使它看起来更好一点。CGPoint
(x, y)
您的问题中缺少一个输入参数:箭头的所需大小,例如从C到B的距离。
话虽如此,以下计算应该对您有所帮助。
// Your points A and B:
CGPoint A = CGPointMake(x1, y1);
CGPoint B = CGPointMake(x2, y2);
// Vector from A to B:
CGPoint AB = CGPointMake(B.x - A.x, B.y - A.y);
// Length of AB == distance from A to B:
CGFloat d = hypotf(AB.x, AB.y);
// Arrow size == distance from C to B.
// Either as fixed size in points ...
CGFloat arrowSize = 10.;
// ... or relative to the length of AB:
// CGFloat arrowSize = d/10.;
// Vector from C to B:
CGPoint CB = CGPointMake(AB.x * arrowSize/d, AB.y * arrowSize/d);
// Compute P and Q:
CGPoint P = CGPointMake(B.x - CB.x - CB.y, B.y - CB.y + CB.x);
CGPoint Q = CGPointMake(B.x - CB.x + CB.y, B.y - CB.y - CB.x);
P是通过首先减去向量CB = (CB.x, CB.y) 然后加上垂直向量 (-CB.y, CB.x)从B计算得出的。