给定点ABC,我如何找到角度ABC?我正在为一个矢量绘图应用程序制作一个feehand工具,为了最小化它生成的点的数量,我不会添加一个点,除非鼠标位置和最后两个点的角度大于某个阈值。谢谢
我所拥有的:
int CGlEngineFunctions::GetAngleABC( POINTFLOAT a, POINTFLOAT b, POINTFLOAT c )
{
POINTFLOAT ab;
POINTFLOAT ac;
ab.x = b.x - a.x;
ab.y = b.y - a.y;
ac.x = b.x - c.x;
ac.y = b.y - c.y;
float dotabac = (ab.x * ab.y + ac.x * ac.y);
float lenab = sqrt(ab.x * ab.x + ab.y * ab.y);
float lenac = sqrt(ac.x * ac.x + ac.y * ac.y);
float dacos = dotabac / lenab / lenac;
float rslt = acos(dacos);
float rs = (rslt * 180) / 3.141592;
RoundNumber(rs);
return (int)rs;
}发布于 2010-08-15 16:12:35
使用arccos的方法是危险的,因为我们可能会使它的参数等于,比如说,1.0000001,并以EDOMAIN错误结束。即使是atan方法也是危险的,因为它涉及除法,这可能导致除以零错误。最好使用atan2,将dx和dy值传递给它。
https://stackoverflow.com/questions/3486172
复制相似问题