所以我根据进入的学位计算我的轴承,一切正常。除了现在我试图显示围绕该传入轴承的视野范围。
例如,进入的方位是0度,我的+/-视角半径是16度。
因此,在0时,我的最小视野范围变为"向下"到344,我的最大值达到16。
每个学位我都有一个QGraphicsLineItem,我根据它在这个范围内的位置着色;它具有与当前放置位置相关联的角度角度。因此,如果该项目不在当前范围内,则为红色,如果该项目为蓝色。
我的问题在于试图找出要检查的逻辑条件。
目前我有:
if(item.degrees <= minViewRange && item.degrees <= bearing )
item.colorBlue = true;
else if (item.degrees >= bearing && item.degrees <= maxViewRange)
item.colorBlue = true;
else
item.colorBlue = false;
所有这一切都可以正常工作,直到我达到零度16度。
因此,例如,在0的方位,只有(0 - 16)条件为真,所以只有那一半被着色。 (344 - 0)不是真的,因为344不小于0.
一旦轴承变为16,那么我的范围再次正确着色,因为那时(0 <16 <32)
我该如何弥补这个?
答案 0 :(得分:1)
计算相对于当前视图的bearing
的方向,并将它们标准化为(-180,+ 180)范围。然后比较半视图的宽度:
relativeBearing = item.degrees - bearing;
while (relativeBearing > 180)
relativeBearing -= 360;
while (relativeBearing < -180)
relativeBearing += 360;
if (relativeBearing >= -viewRange/2 && relativeBearing <= viewRange/2)
item.colorBlue = true;
else
item.colorBlue = false;
或者,用abs()
函数来计算绝对值:
if (abs(relativeBearing) <= viewRange/2)
item.colorBlue = true;
else
item.colorBlue = false;
<强>更新强>
更短,直接使用boolean
比较结果:
item.colorBlue = abs(relativeBearing) <= viewRange;
(根据OP的评论,将其除以一半)。