2012-01-03 10 views
0

Это мой код:Найти точки пересечения 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). Также не приятный результат. Тогда я прибегнул к этому code. Это дает довольно точный результат. Но мне не разрешено использовать этот код (из школы). Поэтому мне было интересно, есть ли более простое решение?

ТНХ заранее

ответ

1

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

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

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

1

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

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

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); 
+0

Вы попробовали? Потому что я получаю эту ошибку: ??? Ошибка при использовании ==> min MIN с двумя матрицами для сравнения и два выходных аргумента не поддерживаются. – Ojtwist

+0

Действительно, произошла небольшая ошибка. Я обновил его. – Oli

+0

ОК, что частично делает трюк x1 и y1 кажущимся правильным (0,2), но второй, который, как вы видите на графике, имеет явный отрицательный y, имеет 4 вместо -2. (Я также думаю, что x и y переключаются, так как оба значения x должны быть около 0, а не 2 и 4) – Ojtwist

Смежные вопросы