Найти точки пересечения Matlab - PullRequest
0 голосов
/ 03 января 2012

Это мой код:

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

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

Ответы [ 2 ]

1 голос
/ 03 января 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);
1 голос
/ 03 января 2012

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...