我试图制作下图:
尽可能相似。我遇到了困难,因为我不确定如何绘制单位圆。怎么做到这一点?我尝试使用极地功能,但我不能让它也绘制蓝色十字架和红色十字架。有人有想法吗?
答案 0 :(得分:3)
编辑回答
以下是代码的一部分:
% --- Plot everything on the same axes
hold on
% --- Plot the unit circle:
theta = linspace(0, 2*pi, 360);
plot(cos(theta), sin(theta), 'k--');
% --- Plot the blue points
x = [0.2 0.4 0.4 0.8];
y = [0.4 0.2 0.8 0.4];
scatter(x, y, 'bs');
% --- Plot the red points:
x = [0.4 0.8];
y = [0.4 0.8];
scatter(x, y, 'ro');
要获得最终的情节仍有许多修改,但至少这是一个起点。
第二次修改
要回答关于线和圆的交叉的问题,你必须从数学背后开始。线和圆由以下等式定义:
y = a.x + b % Cartesian definition of a line
(x-x0)² + (y-y0)² = r² % Cartesian definition of a circle
如果将两者结合起来,就会发现找到交点类似于找到解决方案:
(a²+1).x² + 2(a(b-y0)-x0).x + x0²+(b-y0)²-r² = 0
即多项式的根。由于这是一个trinom,有3种可能性:0解(无交点),1解(线与圆相切)和2个解(穿过圆的线)。
所以,在实践中你必须:
a
,b
,x0
,y0
和r
roots
)希望这有帮助,
答案 1 :(得分:0)
%% Construct polar grid (put inside another function)
range = 0.2:0.2:1;
n = 50;
for i=1:length(range)
ro = ones(1,n);
ro = ro.*range(i);
th = linspace(0,pi*2,n);
[xx,yy] = pol2cart(th,ro);
plot(xx,yy, 'color',[.9 .9 .9]), grid on, hold on
n = round(n * 1.5);
end
%% Plot like normal
x1 = [.2 .4 .4 .8];
y1 = [.4 .2 .8 .4];
x2 = [.4 .8];
y2 = [.4 .8];
plot(x1,y1, 'bx',...
x2,y2, 'ro');
xlim([-.05 1]);
ylim([-.05 1]);