【问题标题】:How to detect a strict clockwise/ counter clockwse motion in MATLAB如何在 MATLAB 中检测严格的顺时针/逆时针运动
【发布时间】:2011-10-03 22:02:22
【问题描述】:

我需要编写一个小程序来测试一条线(位置向量)是严格顺时针移动还是顺时针移动。我尝试用atand求角度,但是当它通过90度时它可能会从负值跳到正值,如果我使用斜率方法也会有同样的事情。

但是,运动不必在 90 度处切入,它可以从 89 度跳到 91 度。然后可能会发生大坡度跳跃。有什么建议

谢谢

【问题讨论】:

    标签: matlab


    【解决方案1】:

    一种方法是计算连续位置向量的叉积。如果所有的叉积都是正数,则这条线严格顺时针移动。同样,如果它们都是负数,则该线逆时针移动。如果符号混合,则线不会严格沿一个角度方向移动:

    function checkRotation(pos)
    
    pos(:,3) = 0;
    pos = unique(sum(sign(cross(pos(1:end-1,:), pos(2:end,:))), 2));
    if isequal(pos, 1)
        disp('Rotation was counter-clockwise');
    elseif isequal(pos, -1)
        disp('Rotation was clockwise');
    else
        disp('No strict rotation direction');
    end
    

    -10<=x<=10-10<=y<=10 上创建一些随机位置向量并测试旋转:

    >> pos = 20 * rand([10, 2]) - 10 位置 = -8.28968405819912 9.26177078573826 -4.75035530603335 0.936114374779359 6.02029245539477 0.422716616080031 -9.41559444875707 -5.36811226582952 8.57708278956089 -0.222045121596661 4.60661725710906 2.48120176347379 -0.227820523928417 3.58271081731495 1.57050122046878 -2.08969568662814 -5.25432840456957 -2.65126702911047 -0.823023436401378 9.75964006323266 >> 检查旋转(位置) 没有严格的旋转方向

    创建仅逆时针移动的位置向量并进行测试:

    >> θ = 0:15:180; >> pos = [cosd(theta)' sind(theta)']; >> 检查旋转(位置) 逆时针旋转

    同样适用于 CW 旋转:

    >> θ = 180:-15:0; >> pos = [cosd(theta)' sind(theta)']; >> 检查旋转(位置) 顺时针旋转

    请注意,旋转检测的成功与否受限于您的采样率。如果线条在线条位置的连续采样中逆时针旋转超过 180 度,则它与顺时针方向的旋转小于 180 度没有区别。这是aliasing 的示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-11
      相关资源
      最近更新 更多