2013-06-05 2 views
1

У меня есть входной файл, который хранит данные в этом формате:прокладочные больше линий в Matlab

x1 y1 x2 y2 

Это одна строка, и она представляет собой две точки линии. Теперь у меня много таких строк , и для каждой строки мне нужно нарисовать линию. Есть ли эффективный метод для этого? Должен ли я проходить каждую линию отдельно с помощью цикла for? Какую команду я использую для рисования линии?

Спасибо

+0

Я не застрял, я спрашиваю о эффективных способов сделать это. Это нормально, если я использую цикл и рисую каждую строку отдельно. – user2381422

ответ

1

попробовать что-то вроде этого, возможно, потребуется изменить формат %f %f %f %f:

fid = fopen('yourfile', 'r'); 

C = textscan(fid, '%f %f %f %f'); 

fclose(fid); 

figure(100) 
plot(C{:, 1}, C{:, 2}, C{:, 3}, C{:, 4}); % column based lines 

figure(200) 
plot([C{1} C{3}]', [C{2}, C{4}]'); % row based lines 

;

+0

Но что, если у меня 1000 строк? – user2381422

+1

textscan будет читать их все, если вы хотите, чтобы первый 1000 был прочитан, используйте 'C = textscan (fid, '% f% f% f% f', 1000', проверьте документацию – Nick

+0

Спасибо, я могу принять ваши ответ за 4 минуты – user2381422

0

Изучив это, я обнаружил, что метод построения графика в другом ответе работает не так, как ожидалось.

При тестировании с помощью следующего входного файла:

0 1 3 2 
1 2 9 4 
5 6 7 8 

Судя по вопросу, это должно дать сюжет из трех прямых линий. Строка 1 должна начинаться с координаты x = 0, y = 1 и заканчиваться в точке x = 3, y = 2. Аналогично для остальных.

При чтении с кодом при условии:

fid = fopen('yourfile', 'r'); 
C = textscan(fid, '%f %f %f %f'); 
fclose(fid); 

Полученное значение C является C = {[0;1;5], [1;2;6], [3;9;7], [2;4;8]};. Все хорошо и хорошо.

Когда заговор с plot(C{:, 1}, C{:, 2}, C{:, 3}, C{:, 4}); Это результат: plot(C{:, 1}, C{:, 2}, C{:, 3}, C{:, 4});

Это потому, что сюжет будет рисовать серию линий для X=C{:,1}; Y=C{:,2};, оба из которых в этом примере, длиной в три очка, а другая линия для X=C{:,3}; Y=C{:,4};

для построения три отдельных линий, с концами указанных [x1 y1], [x2 y2], вы можете использовать следующий код:

plot([C{1} C{3}]', [C{2}, C{4}]'); 

plot, при условии, с матрицами как параметры X и Y будет строить отдельную строку для каждого столбца, поэтому это приводит:

plot([C{1} C{3}]', [C{2}, C{4}]');

+0

, как указано в вопросе, файл состоял из 'x1 y1 x2 y2', поэтому я предполагаю, что 2 строки запрошены, как видно на вашем первом графике. – Nick

+0

@Nick «Это одна строка, и она представляет две точки для строки. Теперь у меня есть много таких строк ** и ** для каждой строки, мне нужно нарисовать строку **». (выделено мной) – Alan

+0

Я понимаю, что вы имеете в виду. Я адаптирую ответ, но мне интересно, нужен ли -1 :) – Nick

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