绘图单元在matlab中圆圈并使用保持插入单个数据点并绘制与圆的交点

时间:2015-03-04 21:02:52

标签: matlab

我试图制作下图:

enter image description here

尽可能相似。我遇到了困难,因为我不确定如何绘制单位圆。怎么做到这一点?我尝试使用极地功能,但我不能让它也绘制蓝色十字架和红色十字架。有人有想法吗?

2 个答案:

答案 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个解(穿过圆的线)。

所以,在实践中你必须:

  • 获取问题的参数abx0y0r
  • 找到多项式的根(例如,使用函数roots
  • 根据根数决定做什么。

希望这有帮助,

答案 1 :(得分:0)

Fig

%% 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]);