一:请给出绘制图1中右图的圆、折线束及其包络线(心形线)的步骤及其实现原理。给出绘制该图的MATLAB程序及其运行结果(图形)。
题目帮助:
例如,画图的初略步骤可以是这样
a) 画一个基圆C,并在C的周界上画一个点O。
b) 在C上选取另一个点P,画一条线在P点与C相切。
c) 标出切线上的一个点Q使PQ与OQ垂直。
d) 对圆C上的若干点重复b),c)。
e) 将所有的点Q依次用直线段连接起来。
解决方法:
% O点已知(-1,0)。即代码中初始化的(m0,n0)点。
%1 在基圆C上选取一个点P( m,n ),心里默画一条线在P点与圆C相切。。
%2 标出切线上的一个点Q(x0,y0)使PQ与OQ垂直。实际上要求出OQ的直线,再求出PQ与之的交点Q的坐标。
%3 将坐标Q与P和O点相连,
%4 对圆C上的若干点重复1 2 3 的步骤。即代码中循环的次数,用i不断循环t设置的范围,实际上就是不断重复选择圆C上点当作新的O点。
%5 如果要连接各点的话 ,注意此处的连接需要记录上一次交点的位置我设为了(m0 n0),再与本次的新交点Q(x0,y0)坐标相连。
MATLAB代码:
t =-3:0.1:3
ezplot("cos(t)","sin(t)");
axis([-2 2 -2 2]);
hold on
m0 = -1;
n0 = 0;
for i = t
m = cos(i);
n = sin(i);
x0 = (n+m*m/n-n/m)/(n/m+m/n);
% y0 = (n/m)*(n/m+m*m/n+n)/(n/m+m/n)+m*m/n+n;
y0 = n/m*x0+n/m;
x1 = [x0,-1]
y1 = n/m*x1+n/m;
plot(x1,y1);
hold on
x2 = [m,x0];
y2 = -1*m/n*x2+m*m/n+n;
plot(x2,y2);
hold on
if m0 ~= -1
plot([m0 x0],[n0 y0]);
end
m0 = x0;
n0 = y0;
end
grid on;
运行结果:
q 是四川师范派来的吗 巧我也是