Как сделать треугольник в матлабе
У меня есть треугольник в координатах (u,v) на изображении. Я хотел бы нарисовать этот треугольник в координатах 3D (X,Y,Z) , сопоставленных текстурой с треугольником на изображении.
Здесь u,v,X,Y,Z -это все векторы с тремя элементами, представляющими три угла треугольника.
У меня есть очень уродливое, медленное и неудовлетворительное решение, в котором я:
- извлечение прямоугольной части изображения
- преобразуйте его в пространство 3D с помощью преобразования, определяемого тремя точками
- нарисуйте его с помощью поверхности
- наконец, маскировка всего, что не является частью треугольника с AlphaData
Конечно, должен быть более простой способ сделать это?
2 ответа
Я хотел бы нарисовать различные треугольники, используя MATLAB, показанный на рисунке ниже. Предположим, что у меня есть 3 вектора V1=[1 1 1] , V2=[-1 1 1] , v3=[-2 -2 -2] . Как я могу нарисовать треугольник с этими векторами в 3D? ![Введите описание изображения здесь][1]
Я знаю, как нарисовать прямоугольник, круги и т. Д. С g.drawRect или g.drawOval . Но нет g.drawtriangle . Есть ли способ нарисовать треугольник без того, чтобы мне приходилось рисовать его с каждой стороны треугольника?
У меня есть то, что я считаю лучшим решением для вас, включающим два шага. Во-первых, он извлекает прямоугольную часть вашего изображения, половина которой является треугольным участком, который будет использоваться в качестве карты текстуры, а половина будет проигнорирована. Затем эта текстурная карта применяется к объекту поверхности 3-D, точки которого настраиваются для отображения его в виде треугольника, а не четырехугольника.
В примере, который я покажу здесь, я буду использовать следующие значения для ваших различных параметров, предполагая, что у вас есть треугольник, точки которого помечены как "origin" (вершина треугольника), точка "A" и точка "B" в пространстве изображений (как на первом изображении ниже):
Извлечение карты текстур с помощью проективного преобразования:
На этом шаге используются функции maketform и imtransform набора инструментов обработки изображений для выполнения проективного преобразования части изображения, содержащей треугольник, который вы хотите использовать в качестве карты текстур. Обратите внимание, что, поскольку изображения должны быть прямоугольными, необходимо включить дополнительное треугольное сечение, определяемое точками (O,B,C) .
Треугольная часть изображения, которую вы хотите, будет находиться в нижней правой половине изображения, в то время как дополнительная треугольная часть "filler" будет находиться в верхней левой части. Обратите внимание, что этот дополнительный треугольник может выходить за пределы изображения, что приведет к тому, что часть его по умолчанию будет заполнена черным цветом. Вот код для выполнения проективного преобразования, проиллюстрированного выше:
Обратите внимание, что этот код создаст конечное изображение triTexture того же размера, что и входное изображение img .
Построение треугольной поверхности, отображенной текстурой:
Построение поверхности теперь довольно просто, если предположить, что вы упорядочили значения переменных x,y,z таким образом, что координаты исходной точки находятся в первых индексах, координаты точки А-во вторых индексах, а координаты точки В-в третьих индексах. Теперь вы можете создать новые наборы координат поверхности 2-by-2 X,Y,Z , которые содержат две копии точки B, что приводит к отображению только половины поверхности (т. е. половина, содержащая желаемое треугольное изображение в виде текстурной карты). Вот код для этого:
И вот результирующая текстурная треугольная поверхность, которую он создает, с добавленной вставкой, чтобы показать, что текстурная карта содержит правильную треугольную часть исходного изображения:
Я пытаюсь нарисовать текстуру с обеих сторон треугольника в Android. У меня есть следующий код float textureCoordinates[] = < 0.0f, 0.0f, // 0.0f, 1.0f, // 1.0f, 0.0f >; short[] indices = new short[] < 0, 1, 2 >; float[] vertices = new float[] < -0.5f, 0.5f, 0.0f, // p0 -0.5f, -0.5f, 0.0f, // p1.
У меня есть решатель треугольников, и мне нужен способ использовать значения, которые я получаю из ответа, чтобы нарисовать треугольник на экране, который ему соответствует.
1 -е занятие по MATLAB
ЛАБОРАТОРНАЯ РАБОТА №1
I . Основные вычислительные процедуры системы MATLAB
1. Операции сложения, вычитания с присвоением и без присвоения результата (+, -).
2. Операции умножения, деления (*, /).
3. Возведение в степень ( ^ ) .
4. Извлечение из квадратного корня ( sqrt ): sqrt (16+9)
5. Повторение действий, повторение с измененными параметрами и функциями.
6. Невыполняемый комментарий — %
7. Задание ряда чисел с заданным шагом и по умолчанию: t=(0:0.5:7)' % В виде столбца
8. Задание матриц (например: a = [1 2 3;4 5 6]):
9. Матричные операции:
— сложение, вычитание (+, -) ;
— умножение (*) ;
— обращение (inv) ;
— возведение в степень ( ^ ) ;
— транспонирование ( ' ) .
— c оздание нижней треугольной матрицы А: tril (А).
— c оздание верхней треугольной матрицы А: triu (А).
¾ вращение матрицы А относительно вертикальной оси: fliplr ( A ).
¾ вращение матрицы А относительно горизонтальной оси: flipud ( A ).
¾ поворот матрицы А на 90 0 против часовой стрелки: rot 90( A ).
¾ поворот матрицы А на 90 0 по часовой стрелке: rot 90( A ,-1).
¾ поворот матрицы А на кратное 90 0 значение: rot 90( A , k ), где k = ± 1, ± 2, . . . — множитель, на который умножается угол 90 0 .
¾ п.п. вращения и поворота выполнить для квадратных и прямоугольных матриц.
¾ формирование единичной матрицы заданного размера n : eye ( n ).
¾ формирование единичной матрицы по размеру данной квадратной матрицы А: eye ( size ( A )).
¾ матрица единиц данного размера n ´ m : ones ( n , m ). Для создания квадратной матрицы: ones ( n ).
¾ матрица единиц по размеру заданной матрицы А: ones ( size ( A )).
¾ матрица нулей данного размера n ´ m : zeros ( n , m ). Для создания квадратной матрицы: zeros ( n ).
¾ матрица нулей по размеру заданной матрицы А: zeros ( size ( A )).
¾ матрица Паскаля данного размера n : pascal ( n ). Матрица Паскаля является положительно-определенной.
¾ извлечение диагонали заданной матрицы А: diag ( A ).
¾ вычисление следа матрицы А: trace ( A ).
¾ вычисление следа матрицы А через функции sum и diag : sum ( diag ( A )).
¾ магический квадрат размера n ( n >2): magic ( n ).
¾ проанализировать магический квадрат с помощью функций MATLAB : просуммировать элементы каких-либо строк или столбцов, найти след магического квадрата.
¾ создание диагональной матрицы по заданной матрице А: diag ( diag ( A )).
¾ создание диагональной матрицы по заданному вектору-столбцу Р: diag ( P ).
¾ создание диагональной матрицы по заданному вектору-строке N : diag ( N ).
¾ создание диагональной матрицы по заданному вектору или матрице, набираемым в поле аргумента функции diag .
¾ собственные числа действительной или комплексной матрицы А: eig ( A ).
¾ выделение строк или столбцов матрицы: A = [1 2 3;4 5 6]; A (:,2:3) — 2-й и 3-й столбцы
¾ Задание матриц по случайному равномерному закону — rand (например, rand (3,4))
¾ Задание матриц по случайному нормальному закону — randn (например, randn (2,5))
¾ Получение помощи для заданной встроенной функции: help -пробел-функция.
¾ Операции с массивами (перед знаком арифметического действия ставится точка):
(например: [1 2 3;4 5 6].^2) — возведение каждого элемента матрицы в квадрат.
Выполнить матричные операции п.9 в виде операций с массивами.
8. Формирование коэффициентов характеристического полинома заданной числовой матрицы А: poly ( A ).
9. Формирование характеристического полинома заданной числовой матрицы А: poly ( sym ( A )). По умолчанию независимой переменной полинома является х.
10. Формирование характеристического полинома заданной числовой матрицы А с назначаемой независимой переменной полинома (например s ): poly ( sym ( A ), sym (' s ')).
11. Сравнить результаты выполнения п.п. 1.26, 1.27, 1.28.
12. Формирование коэффициентов характеристического полинома матрицы А по ее заданным собственным числам: poly ( eig ( A )).
13. Формирование характеристического полинома по заданным корням, являющимися элементами вектора Р : poly ( P ).
14. Формирование полинома с коэффициентами, являющимися элементами заданного вектора Р: poly 2 sym ( P ). Степень полинома на единицу меньше размерности заданного вектора Р.
II . Информативные сведения о матрицах, векторах, числах.
1. Размерность матрицы А: size ( A ).
2. Длина вектора Р: length ( P ).
3. Применить функцию size к вектору Р, примениить функцию length к матрице А (к прямоугольной и квадратной).
4. Уплотненный вывод на экран массивов и чисел: disp ( A ), disp ( P ), disp ( a ), где а — какое-либо число (действительное или комплексное, например, а=2+3 i ).
5. Определение простого числа: если а - простое число, то функция isprime ( a ) возвращает 1 (единицу), в противном случае будет 0 (ноль). Величина задаваемого числа а имеет определенные ограничения (порядка десятков миллионов).
6. Определение простых чисел из диапазона 2 . . . а: primes ( a ). Величина числа а также ограничена. Функция primes ( a ) возвращает вектор, элементы которого являются простые числа из диапазона 2 . . . а.
7. Определение знак заданного числа а: sign ( a ). Аргументом функции sign могут быть числа, выражения, математические функции.
8. Округление числа а до ближайшего целого: round ( a ).
9. Абсолютное значение заданного числа или выражения — abs : abs ((3-5)/2), abs (-2^3)
III. Специальные функции.
1. Разложение числа N на простые множители: factor ( N ).
2. Суммирование элементов вектора Р: sum ( P ). Результат — число.
3. Суммирование элементов столбцов матрицы А: sum ( A ). Результат — строка, состоящая из суммы элементов каждого столбца матрицы А.
4. Формирование произведения элементов вектора Р: prod ( P ).
5. Формирование произведения элементов столбцов матрицы А: prod ( A ).
6. Формирование матрицы с элементами из возможных перестановок элементов заданного числового вектора Р: perms ( P ).
Создание М-файлов в виде М-сценариев.
2- D графика в MATLAB .
М-сценарии представляют собой последовательность действий или запись вычислительных алгоритмов, которые затем оформляются системой MATLAB в виде m -файлов (с расширением m ). Техт М-сценария может быть написан в любом текстовом редакторе (текстовый документ) и затем перенесен в систему MATLAB , где для дальнейшего использования должен быть сохранен в окне редактора как m -файл.
1. Создание простейших сценариев.
10. Создать в командном окне MATLAB матрицу: а = [1 2 3;4 5 6] или а = [1,2,3;4,5,6];
11. Транспонировать матрицу а : а1 = а ' ;
12. Создать матрицу b = [10 20 30;40 50 60];
13. Перемножить матрицы а1 и b : с = а1* b ;
14. На экране создать надпись 'Перемножение матриц а1 и b :' с помощью disp ('Перемножение матриц а1 и b : ');
15. Вывести результат перемножения, набрав в командной строке обозначение с и нажав клавишу Enter ;
16. Чтобы не было вывода промежуточных результатов, то в конце каждой строки (команды) следует ставить точку с запятой ; .
17. Проделать предыдущие пункты команд с точкой с запятой и без.
18. Пункты 1-6 записать в М-файле. Для этого в командной строке набрать edit . Как только откроется окно текстового редактора, повторить набор команд пп. 1-6 и сохранить под каким-либо именем (например, Lab 1). Тем самым создали М - сценарий.
19. Выйти из редактора в командное окно MATLAB .
20. Запустить на выполнение созданный М - сценарий. Для этого в активной командной строке набрать имя М - сценария и нажать клавишу Enter ;
21. Для возвращения в редактор с целью редактирования созданного М - файла в командной строке набрать edit и через пробел имя желаемого файла (например, Lab 1).
22. В М - файле можно записывать комментарии. Они создаются с помощью знака %. Т.е. после знака % можно писать как на русском, так и на английском и т.д. Все, что находится за знаком %, является невыполняемыми действиями, даже если там будут записаны стандартные команды MATLAB .
23. Создать М - сценарий с набором матриц и их инвертированием. Инвертирование матрицы с: inv ( c ) .
Формирование выборки случайных чисел, распределенных по экспоненциальному закону.
Функция распределения экспоненциального распределения вероятностей:
где — интенсивность распределения, равная обратной величине математического ожидания (среднего) распределения, т.е. где — математическое ожидание.
Выборка случайных чисел определяется через инверсную функцию от F ( t ):
где — случайное число из интервала [0, 1],
1. Сценарий формирования выборки случайных чисел, распределенных по экспоненциальному закону.
1.1. Выборка из 18 случайных чисел с экспоненциальным распределением и с заданным параметром интенсивности, равным 2:
% начало цикла, шаг индексации равен 1
% — случайное число из [0, 1]
% получение вектора-столбца случайных чисел
% сортировка случайных чисел по возрастанию значений
1.2. Формирование выборки 18 случайных чисел с экспоненциальным распределением с помощью встроенной функции expinv :
T=expinv(p2,0.5)
1.3. Формирование выборки 18 случайных чисел с экспоненциальным распределением с помощью встроенной функции exprnd :
R = sort ( y ) % R — вектор случайных отсортировнных чисел по возрастанию
Сценарии 1.1, 1.2, 1.3 должны быть сохранены под какими-либо именами, которым система MATLAB присваивает расширение m . Выполнение m -файла (сценария) может быть осуществлено из рабочей строки командного окна MATLAB .
Примеры статистичесих интерактивных графических окон
функций распределения вероятностей.
Диалоговое (интерактивное) окно графических типовых распределений вероятностей в системе MATLAB — функция DISTTOOL ( disttool ).
DISTTOOL позволяет наглядно в виде графиков представлять различные функции распределения вероятностей с задаваемыми параметрами. В DISTTOOL приводятся две функции: cdf — функция распределения (интегральная функция распредления вероятностей), pdf — функция плотности распределения (дифференциальная функция распределения вероятностей).
Диалоговое (интерактивное) окно графических типовых гистограмм распределения вероятностей в системе MATLAB — функция RANDTOOL ( randtool ).
RANDTOOL позволяет представлять гистограммы функций плотности распределения вероятностей с возможным изменением параметров распределения и с изменением количества интервалов рассматриваемой гистограммы.
Графические построения. 2- D графика MATLAB .
2.1. График в полярной системе координат:
t=0:0.01:2*pi; y=3*(1+sin(t)); polar(t,y)
2.2. Совмещение графиков в одной системе координат с помощью функции hold on : t =0:0.01:2* pi ; y 1=3*(1+ sin ( t )); y 2=3*(1- sin ( t ));
polar(t,y1),hold on,polar(t,y2,'r')
2.3. Совмещение трех и более графиков с помощью функции hold on :
polar(t,y1),hold on,polar(t,y2,'r'),polar(t,y3,'g'),polar(t,y4,'k')
2.4. График в декартовой системе координат:
2.5. Формирование пояснений к графику с помощью функции gtext :
t=0:0.01:2*pi; y=sin(t);plot(t,y),grid,gtext('t'),gtext('y')
% требуемые символы ( t и y ) устанавливаются в позиции курсора мыши.
2.6. Построение графиков заданных функций — fplot .
% График функции sin ( t ) или sin ( x ) и т.д. в пределах по аргументу от до :
% График функции sin ( t ) в пределах по t от до с ограничением от -0.7 до 0.7
% Совмещение нескольких графиков: sin ( t ), exp (-0.5 t ), 3 cos ( t )
Задание: Построить с помощью fplot графики следующих функций и их комбинаций:
с соответствующими областями определения.
2.7. Формирование пояснений к графику с помощью функций title , xlabel , ylabel :
t =0:0.01:2* pi ; y = sin ( t );
plot ( t , y ), grid , title ('Синусоида'), xlabel ('радианы'),
ylabel(' функция '),gtext('t'),gtext('y')
% требуемые символы на графике устанавливаются в позиции курсора мыши.
2.8. Формирование пояснений к начертанию нескольких графиков с помощью функции legend :
t=0:0.01:2*pi;y1=sin(t);y2=cos(t);
plot(t,y1,'r'),grid,hold on,plot(t,y2), legend('s1','c2')
2.9. Установка ярлыка legend в различных частях графика:
в левом верхнем углу: legend (' s 1',' c 2', 2);
в левом нижнем углу: legend (' s 1',' c 2', 3);
в правом нижнем углу: legend (' s 1',' c 2', 4);
в правом верхнем углу: legend (' s 1',' c 2', 1)
или по умолчанию: legend (' s 1',' c 2');
вне рабочей области графика: legend (' s 1',' c 2', -1);
2.10. Интерактивный графический калькулятор — funtool .
В командной строке MATLAB набрать функцию funtool и запустить на выполнение ( Enter ). Самостоятельно проделать возможные построения и вычисления: графики стандартных функций, дифференцирование и интегрирование функциональных выражений, обращение функций, сложение двух функций и т.д.
% Установка для графиков цветов осуществляется в соответствии со следующими ключевыми обозначениями, приведенными в табл.1.:
Форма трехмерной треугольной сетки представлена вершинами и гранями треугольника. Например, shape в Matlab, который имеет shape.X, shape.Y, shape.Z(the vertices) and shape.TRIV(the triangle faces) , можно рассматривать как трехмерную треугольную сетку.
Мой вопрос: как визуализировать такую форму в MATLAB с определенной цветовой картой .
(например, цветовую карту можно определить как вектор расстояний для length(shape.X) , элементами которого являются евклидовы расстояния от всех вершин до одной вершины > , в этой ситуации более холодные цвета относятся к меньшим расстояниям, а более горячие цвета относятся к большим расстояниям .)
2 ответа
Основываясь на ответе @Suever, я добавляю дополнительный код, чтобы сделать график формы более плавным и добавить свет камеры. Кстати, если фигура представляет собой облако точек без граней, лучше выбрать scatter3 вместо plot3 .
Если это облако точек :
Вы можете использовать объект patch , чтобы показать свою трехмерную фигуру, а затем использовать < > и FaceColor свойства результирующего патча, чтобы установить значение, которое может автоматически отображаться на пределы цвета осей.
По выбору одного из набора открывается окно с блоками данного набора.
главное окно можно следующим образом: щелкаем на блоке, который хотим
скопировать, и далее щелкаем в главном окне, куда хотим его вставить.
сигналы (не имеют входов) и блоки вывода информации (не имеют выходов)
При составлении диаграммы вначале необходимо дважды щелкнуть на
желаемом блоке, а затем перенести курсор мыши в окно диаграммы и левым
щелчком установить блок в нужном месте. Позиция блока не фиксирована, то
есть впоследствии, если потребуется, его можно переместить блок, не нарушая
Блоки также можно поворачивать и отражать. Чтобы сделать это,
Warning.
You are currently viewing the SEO version of !text.
It has a number of design and functionality limitations.
We recommend viewing the Flash version or the basic HTML version of this publication.
Читайте также: