将角度从 [-180,180] 标准化为 [0,180]
normalize angles from [-180,180] to [0,180]
我有伺服电机只能从0转到180
我的角度范围从 -180 到 180 发送到伺服
我怎样才能在这两个范围之间进行归一化?
如果有任何 MATLAB 函数可以做到这一点?
谢谢
您可以按照@High Performance Mark 为您的特定问题建议的那样加 180 并除以 2,或者这是基于 This post.
的通用版本
这个等式适用于任何限制
我写了一个基于等式的简单函数:
function [out] = normalizeLim( A,oldL,oldR,newL,newR )
out = newL*(1-((A-oldL)./(oldR-oldL))) + newR*((A-oldL)./(oldR-oldL));
end
示例:
x = randi([-180,180],1,8); %// Generating a random vector within the range -180 to 180
>> x
x =
-153 -161 11 101 157 -134 25 -11
>> normalizeLim(x,-180,180,0,180) %// Specifying old and new required limits
ans =
13.5000 9.5000 95.5000 140.5000 168.5000 23.0000 102.5000 84.5000
如果您希望它们是整数,您可以使用 round
函数
对它们进行四舍五入
希望对您有所帮助!!
我有伺服电机只能从0转到180 我的角度范围从 -180 到 180 发送到伺服 我怎样才能在这两个范围之间进行归一化? 如果有任何 MATLAB 函数可以做到这一点? 谢谢
您可以按照@High Performance Mark 为您的特定问题建议的那样加 180 并除以 2,或者这是基于 This post.
的通用版本这个等式适用于任何限制
我写了一个基于等式的简单函数:
function [out] = normalizeLim( A,oldL,oldR,newL,newR )
out = newL*(1-((A-oldL)./(oldR-oldL))) + newR*((A-oldL)./(oldR-oldL));
end
示例:
x = randi([-180,180],1,8); %// Generating a random vector within the range -180 to 180
>> x
x =
-153 -161 11 101 157 -134 25 -11
>> normalizeLim(x,-180,180,0,180) %// Specifying old and new required limits
ans =
13.5000 9.5000 95.5000 140.5000 168.5000 23.0000 102.5000 84.5000
如果您希望它们是整数,您可以使用 round
函数
希望对您有所帮助!!