Как сделать треугольник в матлабе

Обновлено: 04.07.2024

У меня есть треугольник в координатах (u,v) на изображении. Я хотел бы нарисовать этот треугольник в координатах 3D (X,Y,Z) , сопоставленных текстурой с треугольником на изображении.

Здесь u,v,X,Y,Z -это все векторы с тремя элементами, представляющими три угла треугольника.

У меня есть очень уродливое, медленное и неудовлетворительное решение, в котором я:

  1. извлечение прямоугольной части изображения
  2. преобразуйте его в пространство 3D с помощью преобразования, определяемого тремя точками
  3. нарисуйте его с помощью поверхности
  4. наконец, маскировка всего, что не является частью треугольника с 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) .

enter image description here

Треугольная часть изображения, которую вы хотите, будет находиться в нижней правой половине изображения, в то время как дополнительная треугольная часть "filler" будет находиться в верхней левой части. Обратите внимание, что этот дополнительный треугольник может выходить за пределы изображения, что приведет к тому, что часть его по умолчанию будет заполнена черным цветом. Вот код для выполнения проективного преобразования, проиллюстрированного выше:

Обратите внимание, что этот код создаст конечное изображение triTexture того же размера, что и входное изображение img .

Построение треугольной поверхности, отображенной текстурой:

Построение поверхности теперь довольно просто, если предположить, что вы упорядочили значения переменных x,y,z таким образом, что координаты исходной точки находятся в первых индексах, координаты точки А-во вторых индексах, а координаты точки В-в третьих индексах. Теперь вы можете создать новые наборы координат поверхности 2-by-2 X,Y,Z , которые содержат две копии точки B, что приводит к отображению только половины поверхности (т. е. половина, содержащая желаемое треугольное изображение в виде текстурной карты). Вот код для этого:

И вот результирующая текстурная треугольная поверхность, которую он создает, с добавленной вставкой, чтобы показать, что текстурная карта содержит правильную треугольную часть исходного изображения:

enter image description here

Я пытаюсь нарисовать текстуру с обеих сторон треугольника в 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.

Читайте также: