gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 04:54:46 24 4
gpt4 key购买 nike

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

注意:函数传递的是端点(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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com