【发布时间】:2011-10-03 22:02:22
【问题描述】:
我需要编写一个小程序来测试一条线(位置向量)是严格顺时针移动还是顺时针移动。我尝试用atand求角度,但是当它通过90度时它可能会从负值跳到正值,如果我使用斜率方法也会有同样的事情。
但是,运动不必在 90 度处切入,它可以从 89 度跳到 91 度。然后可能会发生大坡度跳跃。有什么建议
谢谢
【问题讨论】:
标签: matlab
我需要编写一个小程序来测试一条线(位置向量)是严格顺时针移动还是顺时针移动。我尝试用atand求角度,但是当它通过90度时它可能会从负值跳到正值,如果我使用斜率方法也会有同样的事情。
但是,运动不必在 90 度处切入,它可以从 89 度跳到 91 度。然后可能会发生大坡度跳跃。有什么建议
谢谢
【问题讨论】:
标签: matlab
一种方法是计算连续位置向量的叉积。如果所有的叉积都是正数,则这条线严格顺时针移动。同样,如果它们都是负数,则该线逆时针移动。如果符号混合,则线不会严格沿一个角度方向移动:
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 上创建一些随机位置向量并测试旋转:
创建仅逆时针移动的位置向量并进行测试:
>> θ = 0:15:180; >> pos = [cosd(theta)' sind(theta)']; >> 检查旋转(位置) 逆时针旋转同样适用于 CW 旋转:
>> θ = 180:-15:0; >> pos = [cosd(theta)' sind(theta)']; >> 检查旋转(位置) 顺时针旋转请注意,旋转检测的成功与否受限于您的采样率。如果线条在线条位置的连续采样中逆时针旋转超过 180 度,则它与顺时针方向的旋转小于 180 度没有区别。这是aliasing 的示例。
【讨论】: