求平面任意圆上一点A绕圆滑动θ角后的坐标B

% 圆圈上某点旋转θ角度后的圆上坐标。
x1=100;y1=200;
x0=10;y0=10;

p0=[x0;y0];
p1=[x1;y1];

radius=norm(p0-p1);
figure
plot(p0(1),p0(2),'ro')
hold on
plot(p1(1),p1(2),'b+')

theta=30/180*pi;
yaxis_new=[x1-x0 y1-y0];
xaxis_new=[1 (x0-x1)/(y1-y0)];

R=[xaxis_new;yaxis_new];
R=R/norm(R);
T=p0;
p2_new=[radius*sin(theta);radius*cos(theta)];

R_inv=inv(R);
R_inv=R_inv/norm(R_inv);
p2=R_inv*p2_new+T;

hold on
plot(p2(1),p2(2),'b*')
axis equal
norm(p1-p0)
norm(p2-p0)

p1_new=R*(p1-T);
p0_new=R*(p0-T);

vec1=p1_new-p0_new;
vec2=p2_new-p0_new;
norm(p1_new-p0_new)
norm(p2_new-p0_new)

theta_inv=acos(dot(vec1,vec2)/(norm(vec1)*norm(vec2)))/pi*180
figure
plot(p1_new(1),p1_new(2),'r*')
hold on
plot(p2_new(1),p2_new(2),'b*')
plot(p0_new(1),p0_new(2),'ro')
axis equal

你可能感兴趣的:(编程)