Найти точки пересечения MATLAB

Это мой код:

%cirkel
t=linspace(0,2*pi);
r1=2;
x1=r1.*cos(t);
y1=r1.*sin(t);
cirkel=plot(x1,y1);
set(cirkel,'color','g')
axis equal
hold on

%cardeoide
t=linspace(0,2*pi);
r2=2*(cos(t)+1);
x2=r2.*cos(t);
y2=r2.*sin(t);

cardeoide=plot(x2,y2);
set(cardeoide, 'color','r')
hold off

Мне нужно найти точки пересечения этих кривых. Я попробовал это, выполнив y1==y2 и x1==x2, но не получил хорошего результата (получил матрицу, полную чисел). Затем я попытался пересечь (x1, x2). Тоже не приятный результат. Затем я прибегнул к этому коду. Это дает довольно точный результат. Но мне не разрешено использовать этот код (из школы). Поэтому мне было интересно, есть ли более простое решение?

спасибо заранее


person Olivier_s_j    schedule 03.01.2012    source источник


Ответы (2)


Для получения наиболее точных результатов не следует использовать выборочные точки x1, x2, y1, y2. Это будут аппроксимации двух кривых, и вероятность того, что пересечение является одной из точек выборки, мала.

Вместо этого составьте уравнения, чтобы найти t в месте пересечения кривых и решить для него (x1(t) = x2(t) и y1(t) = y2(t)).

PS. Причина, по которой вы получаете матрицу, полную чисел, когда выполняете y1 == y2 и x1 == x2, очень очевидна, когда вы понимаете, как работает MATLAB.

person Hannes Ovrén    schedule 03.01.2012

Поскольку вы выбираете точки на своих кривых, вы никогда не найдете одну и ту же точку на обеих кривых.

Так. вы должны попытаться найти точки с наименьшим расстоянием.

dists=pdist2([x1;y1],[x2;y2]);
[~,t1]=min(min(dists,[],2),[],1);
xInt1=x1(t1);
yInt1=y1(t1);
[~,t2]=min(min(dists,[],1),[],2);
xInt2=x2(t2);
yInt2=y2(t2);
person Oli    schedule 03.01.2012
comment
ты пробовал это? Потому что я получаю эту ошибку: ??? Ошибка при использовании ==> min MIN с двумя матрицами для сравнения и двумя выходными аргументами не поддерживается. - person Olivier_s_j; 03.01.2012
comment
хорошо, что частично трюк x1 и y1 кажется правильным (0,2), но второй, который, как вы можете видеть на графике, имеет явное отрицательное значение y, имеет 4 вместо -2. (Я также думаю, что x и y меняются местами, так как оба значения x должны быть около 0, а не 2 и 4) - person Olivier_s_j; 03.01.2012