objective-c - 计算垂直于另一条线的中点的线

标签 objective-c c math line

本质上,我正在尝试计算两点之间的平分线。我有两种方法,一种有效,另一种无效。我不太明白为什么另一个不起作用。行之有效的方法需要更多的计算,并且由于此例程运行了很多次,所以我想使用更简单的方法……但它不起作用。我可能遗漏了一些简单的东西,但我觉得这很有趣,因为我似乎对三角学的掌握比对高中代数的掌握要好。

注意:函数传递的是端点(endPoint1,endPoint2)。 这是有效的方法(使用三角函数计算平分线):

CGPoint midPoint = CGPointMake((endPoint1.x + endPoint2.x) / 2, (endPoint1.y + endPoint2.y) / 2);

//Normalize an end point
CGPoint nPoint = CGPointMake(endPoint1.x - endPoint2.x, endPoint1.y - endPoint2.y);

//Find theta and rotate 90°
CGFloat theta = atanf(nPoint.y / nPoint.x);
if (nPoint.x < 0.0f) theta += M_PI;
else if (nPoint.x > 0.0f && nPoint.y < 0.0f) theta += (M_PI * 2);
theta += M_PI_2;

//Calculate another point along new theta and de-normalize the point
CGPoint centerPoint = CGPointMake(cosf(theta) * 10, sinf(theta) * 10);
centerPoint.x += midPoint.x;
centerPoint.y += midPoint.y;

//Create the line definition
LineDef def = LineDefForPoints(midPoint, centerPoint);

这是一个没有的,但我希望它:

CGPoint midPoint = CGPointMake((endPoint1.x + endPoint2.x) / 2, (endPoint1.y + endPoint2.y) / 2);
//Calculate the slope and invert
CGFloat m = (endPoint1.y - endPoint2.y) / (endPoint1.x - endPoint2.x);
//Take the negative reciprocal 
m = -1/m;       

//Calculate another point on the line        
CGPoint centerPoint = CGPointMake(midPoint.x + 10, midPoint.y + (m * 10));
//Create the line definition
LineDef def = LineDefForPoints(midPoint, centerPoint);

所以我发誓这应该有效。 Y 的变化等于 m 乘以 x 的变化。我计算了中点,计算出垂直线的斜率并计算了该线上的另一个点。但是,当给定相同的端点时,创建的线定义并不相同,所以我遗漏了一些东西。

顺便说一句,LindeDef 是一个简单的结构,具有三个 CGFloat 变量,用于直线的 a、b 和 c 分量。从两点创建一个 LineDef 是微不足道的(我碰巧用一个 block 来做这个):

LineDef (^LineDefForPoints)(CGPoint, CGPoint) = ^LineDef(CGPoint p1, CGPoint p2){
    LineDef line = {0,0,0};
    line.a = p2.y - p1.y;
    line.b = p1.x - p2.x;
    line.c = line.a*p1.x + line.b*p1.y;
    return line;
};

最佳答案

坡截距形式对此很脆弱;使用载体。

〈V〉 = B - A

midpoint = 〈V〉/2 + A

⟂〈V〉 = 〈Vy, -Vx

关于objective-c - 计算垂直于另一条线的中点的线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10232341/

相关文章:

objective-c - 如何遍历 NSCache 键

ios - ios播放系统声音

python - 圆的整数解算法?

java - 将值显式乘以 long

ios - 显示在单独标签上键入的单个字符?

c - 使用 libxml 的 XML 解析器

找不到符号 "Embeddedrcall_Init"

c - 显示 n 次单位根的程序(C 编程)

matlab - Matlab 中使用随机梯度下降进行矩阵分解

objective-c - 使用 navigationController 的白屏