2014-01-15 8 views
0

Я пишу код, чтобы найти значение точки пересечения двух независимых линий, но я смущен тем, что, как получить значение точки пересечения, до сих пор я кодировал:Точка пересечения двух независимых линий в MATLAB

y = [2.63 8.12 13.01 21.87 35.19 58.49]; 
x = [200 400 500 600 800 1000]; 
plot(x,y) 
hold on 
plot([200, 1000], [10, 10]) % this [10, 10] is a straight line 
hold off 

Я хочу, чтобы найти место встречи участка (х, у) и прямой линии, может кто-нибудь дать мне намек на этом спасибо :)

+0

Ваш вопрос задает вопрос о 'Cp' и' VisOfA', но ваш код не имеет ни одного ... –

+0

жаль, что я забыл внести изменения в код, я изменил свою переменную на x и y для легко понятного :) – user2828488

+0

Являются ли оба 'x 'и' y' всегда монотонно увеличиваются? А линия пересечения всегда горизонтальна? –

ответ

4

X-координата монотонно возрастающей кусочно-линейной кривой plot(x,y) пересекает v определяется по формуле:

interp1q(y,x,v); 
1

не очень элегантное решение, но вы могли бы, для каждой пары из последовательных элементов x и y (например, [8.12 13.01] и [400 500] - вторая такая пара), возьмите уравнение линии, проходящей через эти две точки, вычислите пересечение (я предполагаю, что у вас есть/может получить аналитическую формулу для этого?) - и для каждой такой пары точек вы проверяете, действительно ли происходит пересечение между этими двумя граничными точками - если это так, у вас есть оба уравнение линии, проходящей через эти две точки, а также уравнение пересекающейся линии, которое дает точку пересечения.

+1

Ударьте меня в это. X составляет около 438,4458 для y из 10 (y = 0,0489x - 11,44) иш для сегмента линии 400,8,12 -> 500,13,01 :) –

2

Хорошо, это формула JakubT была предполагая для:

yIntersect = 10; 
dy = diff(y); 
dx = diff(x); 
i=find(diff(y > yIntersect)); 
xIntersect = x(i)+dx(i)*(yIntersect-y(i))/dy(i); 
--> 
xIntersect = 438.45 

Конечно это не производственный код.

+0

Совершенно верно, нет единичного теста. :) –

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