2013-09-10 2 views
0

Я пытаюсь использовать Matlab для некоторых данных. В частности, мне нужно построить ряд строк, несколько раз приписанных к нему двух точек, несколько раз заданных ортогональным вектором.Matlab расширяет график по всему диапазону осей

Я использовал следующее, чтобы получить участок линии:

  1. линии заданы две точки A = [A(1), A(2)] B = [B(1), B(2)]:

    plot([A(1),B(1)],[A(2),B(2)]) 
    
  2. Line данный вектор W = [W(1), W(2)]':

    if(W(1) == 0) 
        plot([W(1), rand(1)] ,[W(2), W(2)]) 
    else 
        plot([W(1), W(1) + (W(2)^2/W(1))],[W(2),0]) 
    end 
    

    где я вычисляю пересечение между x-axi s и линии, используя вторую теорему Евклида о прямоугольнике треугольника, образованном вектором W и линией.

enter image description here

Моя проблема, как вы можете видеть на картинке выше, что линия будет построена только между двумя точками, а не на всем диапазоне моей оси.

У меня 2 вопроса:

  1. Как я могу иметь линию, идущую через весь диапазон оси?
  2. Есть ли более простой и прямой способ (возможно, функция?) Для построения линии, перпендикулярной вектору? (Более простой и более чистый способ решения пункта 2 выше.)

Заранее благодарен.

+0

, если у вас есть две оценки на линии, вы всегда можете использовать 'interp1' или другой интерполяции функции для получения значения вне/внутри ваши границы – MZimmerman6

+0

@ MZimmerman6 - Thks для комментария, но я ничего не понимаю: мне не нужно их интерполировать, потому что у меня есть уравнение линии, поэтому я могу знать его значение на всей оси, я просто нужно запечатлеть это ... любая идея для этого? – Matteo

ответ

1

Знаете ли вы границы своей оси для отображения сюжета? Если это так, вы можете указать диапазон графика с помощью функции axis([xmin, xmax, ymin, ymax]).

Так, из вашего вопроса, если вы знаете наклон m и перехватывать b, вы можете убедиться, что ваша функция вычерчивает линию через все окно, указав:

plot([xmin, xmax], [m*xmin + b, m*xmax + b]); 
axis([xmin, xmax, min(m*xmin+b, m*xmax+b), max(m*xmin+b, m*xmax+b)]); 

где xmin и xmax ценности, вы укажите в качестве диапазона вашей оси x. Это заставит вашу линию перейти от угла вашего заговора к другому углу. Если вы хотите буфер в направлении оси у, а затем добавьте примерно так:

buffer = 5; % for example, you set this to something that looks good. 
axis([xmin, xmax, min(m*xmin+b, m*xmax+b)-buffer, max(m*xmin+b, m*xmax+b)+buffer]); 
+0

thks, это то, о чем я тоже думал! Что вы подразумеваете под буфером? – Matteo

+0

любая идея для части 2? – Matteo

+0

Итак, буфером, я имею в виду, если вы не хотите, чтобы линия проходила из углов вашего сюжета и вместо этого требовала буфер белого пространства выше и ниже линии. – Mozglubov

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