【发布时间】:2015-12-23 10:35:49
【问题描述】:
我在让一个简单的脚本工作时遇到了一些困难。目标是使用某个角度围绕原点旋转一组点。但是,我使用的代码似乎无法保持向量的大小。
我使用一个数组,其中第一列是 x 坐标,第二列是 y 坐标:
for ii=1:1000
angleRads=rand()*2*pi;
randRotPoints(ii,1)=1*cos(angleRads)-0*sin(angleRads);
randRotPoints(ii,2)=0*cos(angleRads)+1*sin(angleRads);
end
figure;
scatter(randRotPoints(:,1),randRotPoints(:,2));
lengths1=sqrt(randRotPoints(:,1).^2+randRotPoints(:,2).^2);
for ii=1:1000
angleRads=rand()*2*pi;
randRotPoints(ii,1)=randRotPoints(ii,1)*cos(angleRads)-randRotPoints(ii,2)*sin(angleRads);
randRotPoints(ii,2)=randRotPoints(ii,2)*cos(angleRads)+randRotPoints(ii,1)*sin(angleRads);
end
figure;
scatter(randRotPoints(:,1),randRotPoints(:,2));
lengths2=sqrt(randRotPoints(:,1).^2+randRotPoints(:,2).^2);
在第一个循环之后,有一个大小为 1 且方向随机的坐标。这通过散点图得到证实,lengths1 数组全为 1。
但是,尝试将这些坐标旋转第二个随机角度的第二个循环会导致看似随机定位的坐标(基于散点图),并且长度不再都是 1。
请帮我找出这个轮换代码哪里出了问题。我知道就性能或行数而言,这不是最有效的代码,如果您想提供一种更好的方法来提高效率,但也请说明需要什么来修复当前格式的代码也是如此。
谢谢。
【问题讨论】:
-
查看我的更新解决方案以改进算法:)
标签: matlab rotation coordinates