24小时热门版块排行榜    

查看: 1087  |  回复: 1

overlove

铜虫 (小有名气)

[求助] 一个椭球旋转问题

想让椭球长轴指向特定一个方向。

比如:[x,y,z]=ellipsoid(0,0,0,10,1,1)吧,设定一个向量,P=[0.1, 0.5, 0.1],或者P=[1 1 0];
想让长轴和P的方向相同。

搞了一下午,转懵了
回复此楼

» 猜你喜欢

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

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

overlove

铜虫 (小有名气)

根据管理员大人的建议,附上代码,可用于椭球的旋转指向。

[x,y,z] = ellipsoid(0,0,0,10,1,1);

%% major axis L and new direction P
DIM = 3;
L = [1 0 0];
P = [1 1 0];
P = P/norm(P);

%% Find rotation matrix
t = find(L, 1, 'first');
beta = eye(DIM-1);
beta = [beta(1:t-1, ; zeros(1,DIM-1); beta(t:end, ];
[orthBasis, R] = qr([L' beta]);
orthBasis = orthBasis * R(1);

t = find(P, 1, 'first');
beta = eye(DIM-1);
beta = [beta(1:t-1, ; zeros(1,DIM-1); beta(t:end, ];
[orthBasis2, R] = qr([P' beta]);
orthBasis2 = orthBasis2 * R(1);
R = orthBasis/orthBasis2;

%%
for i = 1:size(x,1)
    for j = 1:size(x,2)
        xyz = [x(i,j) y(i,j) z(i,j)] * R;
        x(i,j) = xyz(1);
        y(i,j) = xyz(2);
        z(i,j) = xyz(3);
    end
end

figure; hold on
mesh(x, y, z)
L = [10 0 0] * R;
quiver3(0, 0, 0, 1.2*L(1), 1.2*L(2), 1.2*L(3), 0, 'r', 'LineWidth', 3);
axis equal
grid on
view(3)
2楼2015-06-02 10:03:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 overlove 的主题更新
信息提示
请填处理意见