找到圆上任何圆弧的长度 - 确定限制在所需的圆弧上

时间:2013-10-03 01:37:42

标签: c algorithm geometry

此问题紧随find the length of any arc on a circle

从那个问题:

我有一个磁力编码器,可以将轴的位置从0恢复到4095.

伺服有两个逻辑端点,称为MAX和MIN,它们在软件中设置并且可以随时更改,并且轴必须在MAX和MIN位置之间的一个弧上旋转(即行进)。例如,在图片中,蓝色弧有效,但红色不适用于MIN和MAX之间的所有行程。

我正在尝试制定一个简单的算法来验证我的圆圈的蓝色侧允许行进的地方,A和B是否在蓝色弧上,而且两个都不在红色弧上,如果是允许的行程弧为红色,那么A和B都在红弧上?

Top view of the servo shaft

注意:A和B由调用程序设置,并且一直在变化。

2 个答案:

答案 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;