此问题紧随find the length of any arc on a circle
从那个问题:
我有一个磁力编码器,可以将轴的位置从0恢复到4095.
伺服有两个逻辑端点,称为MAX和MIN,它们在软件中设置并且可以随时更改,并且轴必须在MAX和MIN位置之间的一个弧上旋转(即行进)。例如,在图片中,蓝色弧有效,但红色不适用于MIN和MAX之间的所有行程。
我正在尝试制定一个简单的算法来验证我的圆圈的蓝色侧允许行进的地方,A和B是否在蓝色弧上,而且两个都不在红色弧上,如果是允许的行程弧为红色,那么A和B都在红弧上?
注意:A和B由调用程序设置,并且一直在变化。
答案 0 :(得分:1)
与我对你的另一个问题的回答类似:
if (MIN > MAX)
// swap MIN and MAX
if (A < MIN)
A += 4096;
if (B < MIN)
B += 4096;
if (min(A, B) < MAX && max(A, B) > MAX)
// error!
首先你强制两个点都在MIN的同一侧,然后你测试它们是否在MAX的两侧。
答案 1 :(得分:1)
我将以这种方式重述问题:给定位置MIN,MAX和SHAFT,确定A和B是否都在包含SHAFT的弧上。
以下代码将确定点x
是否位于由MIN,MAX和SHAFT定义的同一弧上。断言阐明了先决条件。
assert(shaft != min);
assert(shaft != max);
assert(min < max);
if (min < shaft && shaft < max) {
return min < x && x < max;
}
return x < min || x > max;