-2

这个问题是从找到圆上任何弧的长度开始的

从那个问题:

我有一个磁性编码器,它可以将轴的位置从 0 返回到 4095。

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

我正在尝试制定一个简单的算法来验证在我的圆圈的蓝色一侧允许旅行的位置,A 和 B 在蓝色弧上,并且都不在红色弧上,相反,如果允许的弧旅行是RED,那么A和B都在RED弧上?

伺服轴俯视图

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

4

2 回答 2

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;
于 2013-10-03T02:41:22.257 回答
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 的相反侧。

于 2013-10-03T02:07:36.547 回答