24小时热门版块排行榜    

查看: 2516  |  回复: 2
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

wanbolang

新虫 (小有名气)

[求助] matlab怎么将一条直线旋转一定角度啊

matlab怎么将一条直线旋转一定角度啊
我在matlab上拟合出一条二次曲线,例如y=x^2+5x,我想把这条直线以点(0,0)为端点,旋转一定角度,怎么做啊,请高人指点,谢谢
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wangyuewu08

木虫 (著名写手)

【答案】应助回帖

%-- 平面图形围绕原点旋转 --%
%   初始化旋转之前的数组
X_initial = -5 : 0.01 : 5;          %旋转之前的横坐标
Y_initial = X_initial.^2 + 5 * X_initial;   %旋转之前的纵坐标
LENGTH = length( X_initial );       %需要进行坐标变换的点的个数

%-- 初始化旋转参数 --%
theta = pi / 6;                     %假设沿逆时针旋转 pi / 6
%   X_rotate = 0;                   %旋转中心横坐标,在本例可以省略
%   Y_rotate = 0;                   %旋转中心纵坐标,在本例可以省略

%   初始化旋转之后的数组
X_target = zeros( 1, LENGTH );         %通过zeros和LENGTH初始化数组,能够在计算时提高效率
Y_target = zeros( 1, LENGTH );

%   开始坐标变换
for k = 1: 1: LENGTH;
    temp = X_initial( k ) + Y_initial( k ) * 1i;     %为方便求角度,将每个点用虚坐标进行表示
    angle_temp = angle( temp );         %求旋转之前的点与旋转中心连线的角度
    distance = abs( temp );             %求旋转之前的点与旋转中心连线的角度
    angle_temp = angle_temp + theta;    %求旋转之后的点与旋转中心连线的角度
   
    %   计算旋转后的点的坐标
    Z = distance * exp( 1i * angle_temp );
    X_target( k ) = real( Z );
    Y_target( k ) = imag( Z );
end

%-- 绘制图形 --%
%   绘制旋转之前的图形
subplot( 1, 2, 1 );
plot( X_initial, Y_initial );
title( '旋转之前的图形' );
xlabel( 'X_initial' );
ylabel( 'Y_initial' );
axis equal;

%   绘制旋转之后的图形
subplot( 1, 2, 2 );
plot( X_target, Y_target );
title( '旋转之后的图形' );
xlabel( 'X_target' );
ylabel( 'Y_target' );
axis equal;


楼主,这是调试成功的代码,你复制之后可以直接使用。你可以把他改成函数文件,把原始图像和旋转角度作为输入参数,旋转之后的图形作为输出参数,这样会方便使用。
很重要的一点:程序中用到了关于虚数的几个函数,楼主可以再help文档中看到相关的解释。
希望对你有用
往事并不如烟
3楼2011-05-16 08:29:47
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 3 个回答

wangyuewu08

木虫 (著名写手)

【答案】应助回帖

wanbolang(金币+1): 2011-06-21 22:02:08
问题的关键在于找到旋转前后的联系和差别,以曲线上的一点为例,旋转前后它与旋转中心(在你的问题中是(0,0))的距离没有发生变化,仅仅连线之间的夹角变化了。
具体过程:以一点为例,先求出坐标原点和旋转中心的相对关系(距离和方位,在你的问题中两者重合,可以省略),再求旋转中心与该点(距离和方位),最后代入旋转的角度。
曾经我也考虑过坐标轴旋转变换的问题,希望对你有用
往事并不如烟
2楼2011-05-15 23:29:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见