gpt4 book ai didi

c++ - 了解点相对于直线的相对位置的最佳方法是什么?

转载 作者:搜寻专家 更新时间:2023-10-31 00:35:25 26 4
gpt4 key购买 nike

假设现在我在二维坐标系中有一条直线,可以写成:

ax+by+c=0 

现在我有一个点,它的坐标是 (x0,y0),我的问题是如何判断该点相对于直线(上方或下方)的相对位置。我能想到的一种解决方案如下:

// set up the line
a = ..;
b = ..;
c = ..;
// make sure that b is negative
if (b>0)
{
a = -a;
b = -b;
c= -c;
}
// set the point
x0 = ..;
y0 = ..;

temp = a*x0+b*y0+c;

if (temp<0)
// the point is above the line
else
// the point is under the line.

在上面的代码中我没有考虑直线(水平或垂直)的特殊情况,但基本思路是先确保b为负,然后计算函数的值( temp),并根据其值确定点的位置。我不确定这是否是一个好的解决方案。任何想法将不胜感激。

最佳答案

是的,您的解决方案是正确的。可能的优化 - 不要取反系数,只计算表达式 b*(a*x+b*y+c) 的符号。 + 表示上面,- 表示下面,0 表示线上的点和不确定的情况 - 垂直线。

解释:共线方程

a*x+b*y+c=0 

可以转化为正规方程

x*cos(t)+y*sin(t)-p=0

(除以 -sign(c)*Sqrt(a^2+b^2))
其中 p 是从坐标原点 (O) 到直线的法线长度,t 是 OX 轴与该法线之间的夹角。

表达符号

XX*cos(t)+YY*sin(t)-p=0 

当点(XX,YY)和坐标原点被这条线分割时为正,否则为负。所以对于 t 在范围 0..Pi sin 是正的,表达式的正值表示点在直线上方(原点在下方)等等...

关于c++ - 了解点相对于直线的相对位置的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23918282/

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