Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
57 / 33 / 8
Регистрация: 08.07.2011
Сообщений: 235
1

3D поверхность по известным трем векторам.

03.04.2012, 19:14. Показов 2935. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток.
Продолжается моя война с графиками.
Вопрос следующий. Известен начальный размер образца, например n*m, где

n = 20;
m = 30;

Грубо говоря имеется матрица из 600 точек размером 20*30

1 ... m
....
....
n....... 600

Каждая точка матрицы имеет декартову координату

x = [1.0000 1.9672 2.9357 3.9058 ...];
y = [ 1.0000 0.9907 0.9862 0.9908 ...];

так же известен столбец

z = [-0.0163 -0.0204 -0.0212 -0.0216.......];

полученный путем определенных преобразований

Проблема в том что мне нужно построить такой график, который будет отражать координаты точек матрицы и заданную размерность(n*m).
Но при этом в 3м измерении рисуем не "высоту" фактически наших точек, относительно плоскостей X и Y, а z определяет цвет точки получается в плоскости Z.

пробовал сделать это следующим образом

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
n = 20; 
m = 30; 
sz = n*m; 
 
x = [1.1; 1.3; 1.5; 2.1; 2.3; 2.5...........]; 
y = [1.2; 1.4; 1.6; 2.2; 2.4; 2.6...........]; 
 
z = [1.1; -1.05; 1.15; -1.2; 1.08; -1..............]; 
 
general = [x,y,z]; 
general = peaks(100); 
 
surf(general);
Но график выводится не тот, который хотелось бы, во-первых размер 100*100 получается, я не вижу свой образец размера 20*30, во-вторых не вижу никакой информативности которую фактически должны нести цвета(z);

По задумке должен получиться график, на котором выводятся мои x и y координаты точек(фактически рисуется сама точка по 2м координатам), а по Z - цвет(высота).

Надеюсь я доступно все расписал, что мне необходимо. Какие есть у кого советы??? С удовольствием, почитаю!!!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.04.2012, 19:14
Ответы с готовыми решениями:

Найти выражение по трём заданным векторам
Нужна срочно помощь в решенииhttps://i.**********/WMGBkTx.png Правило 5.18: "Запрещено размещать...

Разложите вектор по трем векторам и найдите его длину
Вспоминаю школьную программу. Поняла, что ничего не помню. Можете, пожалуйста, вот прям для...

Проверить, можно ли по известным трем сторонам построить треугольник
создать программу

Рассчитать площадь и периметр треугольника по трем известным сторонам
Рассчитать площадь и периметр треугольника по трем известным сторонам.

3
2833 / 2130 / 86
Регистрация: 02.05.2010
Сообщений: 3,195
03.04.2012, 21:57 2
Зачем Вам это строка general = peaks(100). Она задает вполне определенную поверхность, которая к Вашим данным никакого отношения не имеет.
Matlab M
1
2
3
4
5
6
x = [1.1; 1.3; 1.5; 2.1; 2.3; 2.5];
y = [1.2; 1.4; 1.6; 2.2; 2.4; 2.6];
z = [1.1; -1.05; 1.15; -1.2; 1.08; -1];
general = [x,y,z];
% general = peaks(100);
 surf(general);
С усеченными данными вот что мы увидим.
Миниатюры
3D поверхность по известным трем векторам.  
2
536 / 523 / 38
Регистрация: 13.03.2011
Сообщений: 727
04.04.2012, 00:55 3
KorPaEv, ещё добавьте в конце того, что предложено Галина Борисовн
Matlab M
1
2
shading interp
view(0, 90)
и будет Вам счастье. :dance3:
2
57 / 33 / 8
Регистрация: 08.07.2011
Сообщений: 235
04.04.2012, 06:41  [ТС] 4
Спасибо, про peaks вообще не подумал, что он не нужен, мне казалось он определяет область поверхности. Получается можно без него обойтись.

Добавлено через 1 час 30 минут
Цитата Сообщение от Галина Борисовн Посмотреть сообщение
Зачем Вам это строка general = peaks(100). Она задает вполне определенную поверхность, которая к Вашим данным никакого отношения не имеет.
Matlab M
1
2
3
4
5
6
x = [1.1; 1.3; 1.5; 2.1; 2.3; 2.5];
y = [1.2; 1.4; 1.6; 2.2; 2.4; 2.6];
z = [1.1; -1.05; 1.15; -1.2; 1.08; -1];
general = [x,y,z];
% general = peaks(100);
 surf(general);
С усеченными данными вот что мы увидим.
Нет, не сработало!!!
Представьте, что у меня в x,y,z лежит по 600 значений, тогда general у меня размерностью 600*3 и surf отрисует 600*3 - это неправильно. Я же вначале писал, что исходный образец размером 20*30 точек, если перевести в декартовы координаты то получается 600 значиний по х, y и z, вот мне и нужно отрисовать исходный размер образца по этим значениям.

Я так понимаю надо делать что то типа x = reshape(x, 20, 30), y = reshape(y, 20, 30), z = reshape(z, 20, 30) и уже после того как я получу исходный размер, то отрисовывать поверхность.

Какие есть соображения?? Причем как я писал значения z должны определять цвет точки а не высоту относительно x и y.

Добавлено через 47 минут
Все получил то,что мне надо, как я и думал, делаем reshape(1:600, 30, 20) по всем векторам и рисуем surf или mesh!!! отличный рисунок получился!!!

ТЕМУ НА ЗАКРЫТИЕ!!!
0
04.04.2012, 06:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.04.2012, 06:41
Помогаю со студенческими работами здесь

По известным трем вершинам прямоугольника (x1, y1), (x2, y2), (x3, y3) найти координаты четвертой вершины
Помогите составить такую прогу на C#.

Реализовать функцию нахождения площади треугольника по трём известным сторонам
Народ, решите пожалуйста! Сам не успеваю, очень прошу! Разработать функцию f(x, у, z), которая...

Функции. Вернуть трехзначное число по известным цифрам и определить, кратно ли полученное число трем
Доброго времени суток! Не пойму, как из 3 отдельных цифр, введённых пользователем, получить...

Циклы с известным и не известным числом повторений
Я вот тут на начальном уровне знания паскаля, а такие задачки задали.....:( Напишите программу...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru