С Новым годом! Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.50/48: Рейтинг темы: голосов - 48, средняя оценка - 4.50
1 / 1 / 0
Регистрация: 31.01.2013
Сообщений: 20

Построение графика по трем точкам

31.01.2013, 19:59. Показов 9720. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Коллеги, добрый вечер.

Просьба подсказать.
Есть файл с данными вида:
1 1 5
1 2 7
1 3 5
1 4 1
2 1 4
2 2 5
2 3 1
2 4 7
Или 3 файла раздельных
Кликните здесь для просмотра всего текста
Файл 1:
1
1
..
2

Файл 2:
1
2
3
4
..
4

Файл 3:
5
7
5
..
7


Можно любой сделать.
Нужно построить 3х-мерный график (X,Y,Z)

plot3(x,y,z) рисует проволочный график, неинформативно.
Хотелось бы нарисовать красивый, как поверхность. Где высокие значения - это красный цвет, низкие - зеленый. Или наоборот.
Как это сделать?

Привел x,y,z к матрицам и теперь при вызове surf(x,y,z) вижу:
Matrix dimensions must agree.
При этом:
Code
1
2
3
4
5
6
7
8
9
10
11
>> size(x)
ans =
        3721           1
 
>> size(y)
ans =
        3721           1
 
>> size(z)
ans =
        3721           1
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.01.2013, 19:59
Ответы с готовыми решениями:

Построение поверхности по трем точкам
У меня есть трехмерная матрица сигналов, полученных с датчика (x,y,z), как построить поверхность, в которую будут входить эти точки? ...

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

Построение 3д графика по 3 точкам и матрице
Здравствуйте! возникла необходимость построить 3д график. У меня дано только матрица(3х11) и три точки. 0,1,100. Пробовал построить, но...

21
1 / 1 / 0
Регистрация: 31.01.2013
Сообщений: 20
31.01.2013, 20:18  [ТС]
Вот пример данных.
RTS1 - это в 1 файле 3 столбца.
RTS3 - это 3 файла по одному столбцу.
Вложения
Тип файла: zip RTS_1.zip (19.0 Кб, 50 просмотров)
Тип файла: zip RTS_3.zip (11.4 Кб, 21 просмотров)
0
1 / 1 / 0
Регистрация: 31.01.2013
Сообщений: 20
31.01.2013, 20:36  [ТС]
Пробовал:
Как в этой теме Построение поверхности по трем точкам
Получается неверно.

Пробовал:
Matlab M
1
2
3
4
5
6
fid = fopen('MyFile.txt','r'); 
a = fscanf(fid, '%f %f %а', [3 inf]);
a = a'; 
fclose(fid); 
 
surf(a);
Опять же неправильно рисует.
0
1 / 1 / 0
Регистрация: 31.01.2013
Сообщений: 20
31.01.2013, 20:45  [ТС]
Вот если на 2д. Должно быть аналогично в 3д:
Изображения
 
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
01.02.2013, 10:49
Надо было глянуть еще здесь: Построить трехмерный график по точкам
Там в конце как раз я и предложил алгоритм преобразования трехстолбцовой матрицы (первый файл) в нужный формат. В данном случае получим:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
clear;
clc;
% считываем файл 
M = load('export2_matlab.csv');
% раскидываем столбцы 
X = M(:,1);
Y = M(:,2);
Z = M(:,3);
% формируем векторы Y и X
fst_y = find(Y == Y(1));
len_y = fst_y(2)-1; % длинна вектора Y
Y = Y(1:len_y);
 
len_x = length(fst_y); % длинна вектора X
X = X(fst_y+1);
 
% формируем матрицу Z
Z = reshape(Z,len_y,len_x); 
 
surf(X,Y,Z,'FaceAlpha',0.5)
shading interp
xlabel('X')
ylabel('Y')
Результат *трах-тибидох-тибидох*

1
1 / 1 / 0
Регистрация: 31.01.2013
Сообщений: 20
01.02.2013, 11:12  [ТС]
Большое спасибо!

Добавлено через 14 минут
Коллега, пара вопросов по коду:

fst_y = find(Y == Y(1)); - "ind = find(X) locates all nonzero elements of array X, and returns the linear indices of those elements in vector ind." - подскажите, а зачем искать эти линейные индексы, не совсем понимаю. Что-то связано с необычным хранением данных в матлабе?

len_y = fst_y(2)-1 - Из числа линейных индексов вычитаем 1? Зачем? Не понял.

Y = Y(1:len_y); - это сформировали массив y - просто с 1 до конца массива?

X = X(fst_y+1); - не понял, почему +1


Заранее спасибо!
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
01.02.2013, 12:01
Дружочек, для начала вспомни структуру трехстолбцовой матрицы:
https://www.cyberforum.ru/cgi-bin/latex.cgi?\begin{pmatrix}X & Y & Z\\1 & 1 & 522\\ 1 & 2 & 541\\ 1 & 3 & 154\\ 1 & 4 & 542\\ 2 & 1 & 151\\ 2 & 2 & 121\\ 2 & 3 & 115\\ 2 & 4 & 113\\ 3 & 1 & 721\\ 3 & 2 & 152\\ 3 & 3 & 421\\ 3 & 4 & 564\end{pmatrix}
Теперь смотри второй столбец (Y).
Строка fst_y = find(Y == Y(1)); находит номера позиций, где значения Y равны первому значению, т.е. начинают повторяться.
Первым элементом массива fst_y будет 1, второй fst_y(2) - номер элемента где Y опять будет равен Y(1), а вот длинна неповторяющихся позиций Y равна как раз таки:
len_y = fst_y(2) - 1;
Y = Y(1:len_y); - берем из столбика Y первые неповторяющиеся значения и сохраняем все это опять таки в Y
X = X(fst_y+1) - поидее можно было без прибавления 1
1
n6
0 / 0 / 0
Регистрация: 06.02.2013
Сообщений: 15
20.02.2013, 13:35
А не подскажете, почему у меня после выполнения кода, представленного выше, матлаб выдает ошибку: "Attempted to access fst_y(2); index out of bounds because numel(fst_y)=1." ?
0
1 / 1 / 0
Регистрация: 31.01.2013
Сообщений: 20
20.02.2013, 13:36  [ТС]
Цитата Сообщение от n6 Посмотреть сообщение
А не подскажете, почему у меня после выполнения кода, представленного выше, матлаб выдает ошибку: "Attempted to access fst_y(2); index out of bounds because numel(fst_y)=1." ?
Скорее всего неверные данные.
0
n6
0 / 0 / 0
Регистрация: 06.02.2013
Сообщений: 15
20.02.2013, 17:23
А как представить данные в нужной форме? У меня они в экселе, сведены в таблицу из трех столбцов.
0
1 / 1 / 0
Регистрация: 31.01.2013
Сообщений: 20
20.02.2013, 17:47  [ТС]
Цитата Сообщение от n6 Посмотреть сообщение
А как представить данные в нужной форме? У меня они в экселе, сведены в таблицу из трех столбцов.
Я использовал файлы .csv
Смотрите в аттаче в сообщениях выше.
0
n6
0 / 0 / 0
Регистрация: 06.02.2013
Сообщений: 15
26.02.2013, 11:36
Да я тоже такие файлы использую, но выдает вот ту ошибку. Там какие-то конкретные требования есть к файлу?
0
1 / 1 / 0
Регистрация: 31.01.2013
Сообщений: 20
26.02.2013, 11:41  [ТС]
Цитата Сообщение от n6 Посмотреть сообщение
Да я тоже такие файлы использую, но выдает вот ту ошибку. Там какие-то конкретные требования есть к файлу?
разделитель десятичный - точка.
Разбить по колонкам.
Вроде все.
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
26.02.2013, 12:14
n6, ты бы свои выложил, разобрались бы быстрее или ты шпиён иносраный?!
0
n6
0 / 0 / 0
Регистрация: 06.02.2013
Сообщений: 15
26.02.2013, 14:02
так давно выложил..
Зосима, не притворяйся как будто не видел мою другую тему
построение поверхности

прямая ссылка - файл
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
26.02.2013, 14:44
n6, забыл...

* ошибочка вышла *

Тьфу ты! Файлы с одинаковыми именами нарисовал старый
А в твоем случае ситуация хитрее: X - имеет всего одно значение! о какой поверхности может идти рэчь?
Вот, держи кривульку в пространстве
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
clear all
clc
 
A = load('export2_matlab2.csv');
X = A(:,1);
Y = A(:,2);
Z = A(:,3);
plot3(X,Y,Z,'r')
grid on
xlabel('X')
ylabel('Y')
zlabel('Z')
% облет камеры
for i = -50:50
    view(i,30)
    pause(0.001)
end
0
n6
0 / 0 / 0
Регистрация: 06.02.2013
Сообщений: 15
26.02.2013, 15:00
Спасибо) Но это не полный файл. В итоге Х у меня будет равен 1,2,4 и т.д., и для каждого значения будет похожее множество значений в других столбцах. Значит, проблема в том, что здесь одинаковые значения Х? ОК, попробую дополнить файл и построить поверхность.
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
26.02.2013, 15:03
Кроме того, эту кривульку можно скопировать вдоль оси Х и тогда можно получить, нечто похожее на поверхность
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
clear all
clc
 
% считываем файл 
M = load('export2_matlab2.csv');
% раскидываем столбцы 
a = unique(M(:,1));
b = unique(M(:,2));
z = unique(M(:,3));
 
[X Y] = meshgrid(a-2:0.5:a+2, b);
Z = z*ones(1,size(X,2));
 
surf(X,Y,Z,'FaceAlpha',0.5)
xlabel('X')
ylabel('Y')
0
n6
0 / 0 / 0
Регистрация: 06.02.2013
Сообщений: 15
26.02.2013, 15:25
Спасибо! Пригодится. Но все же хотелось бы разобраться с поверхностью.
Добавляю другие значения Х, матлаб выдает ошибку:
Error using reshape
To RESHAPE the number of elements must not change.
А это с чем может быть связано?
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
26.02.2013, 15:49
Цитата Сообщение от n6 Посмотреть сообщение
А это с чем может быть связано?
Связано с тем, что ты пытаешься вектор впихнуть матрицу несоответствующего размера

Цитата Сообщение от n6 Посмотреть сообщение
Добавляю другие значения Х
Куда ты их добавляешь?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.02.2013, 15:49
Помогаю со студенческими работами здесь

Построение графика функции по точкам
Привет всем! И снова проблема с графиком, но на этот раз серьезнее... Объясняю суть задачи. У меня есть уравнение и все дано, кроме...

Построение трёхмерного графика по точкам
Здравствуйте, помогите пожалуйста, matlab недавно установил, мало чего понимаю.... нужно построить трёхмерный график(поверхность) по...

Построение 3d графика в Matlab по трём массивам
Добрый день! Имеется три массива данных: координаты (x, y) и напряжение, зависящее от этих координат. Нужно построить 3d график...

Построение графика по трем переменным в матлаб
y=; x=; z=; = meshgrid(x,y,z); figure surf(X,Y,Z); это не правильно как я понимаю.. Подскажите, пожалуйста, как построить...

Трехмерный график по трем точкам
Всем доброго времени суток! Есть потребность построить трехмерный график по точкам(заданы координаты в таблице). Ищу движок для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru