Вращающийся кубик в MathCAD
Да, отойдём от темы delphi и парсеров сегодня. Просто немного о насущном.
Почему такой пост? Вот, например, был один про 3d-движок на delphi, который очень условно можно таковым назвать. Просто пересчёт координат, да и то не лучшим способом. Теперь мы поступим умнее, но будем уже всё делать в маткаде. А что? Тоже ведь программирование.
Сначала вкратце о том, как рисовать отрезками на графике в MathCAD: нужно создать два вектора одного размера, которые будут содержать координаты точек, X и Y соответственно. И эти точки маткад сам соединит отрезками, если эти вектора указать в графике. Пример:
Теперь представим, что дело обстоит так: у нас есть две системы отсчёта в трёхмерном пространстве: первая стоит на месте, вторую мы перемещаем (см. далее), в ней же находится наш куб.
Зададим координаты точек куба:
Сейчас уже практически ночь, и ничего умнее такой функции не придумал :) Можно проще, я уже так делал, но файл остался на другом компе. Да и ладно. Имеем восемь точек:
Вывел чисто посмотреть, в конечном файле такого быть не должно. Теперь как нужно соединить эти точки, чтобы были видны все ребра куба (несколько отрезков повторяются – провести «чисто» не получится):
Понятно? Хорошо, вернёмся к этому порядку чуть позже, когда будем полностью выводить повёрнутый куб. Как помним, эти точки находятся в системе, которая повёрнута относительно основной. Как повёрнута? Да конечно же на три угла! Допустим, мы знаем все три угла, но как нам пересчитать координаты точек? Всё просто: используем матрицы поворота. Три матрицы: поворот на угол по оси X, по оси Y и по оси Z, вот:
Подробнее про матрицы поворота читай в Википедии, в принципе там всё достаточно просто выводится. В последней строчке на рисунке выше функция, которая выдаст радиус-вектор нужной точки, достаточно задать её номер и три угла.
В трёхмерном пространстве точки получили, как выводить будем? Достаточно одной из проекций, например, на плоскость 0xy. Теперь пора задать два вектора, где по порядку, который расписан моим карандашом на одной из картинок выше, будут идти x- и y-координаты точек:
Оптимизируйте код, если есть желание, мне сейчас лень. А там есть что оптимизировать. Что нам ещё понадобится для анимации: переменная FRAME. Без анимации она равна нулю. Во время анимации – номеру кадра. У нас она будет от 1 до 100. Зададим законы изменения углов для анимации:
Задали рандомные функции (читай наобум, авось красиво получится вращение). Строим!
Пока не очень убедительно? Запускаем анимацию:
Готовое видео:
При копировании материала обязательно оставляем прямую ссылку на http://parsers.info.
Интересно. Про маткад не читал, не знал что в нем можно такое выводить, да и про формулы поворота интересно. Раскрасить кубик невозможно?
В простом графике нет, в 3D графике уже можно, но там совсем другая история :)

можно ли при вращении куба в качестве фона подгружать в MathCAD собственную картинку (формата jpg, png или gif)? И какую функцию для этого лучше использовать.
Да вроде нельзя
3D график — супер вещь!
спасибочки за статью!
Мда, прочитав внимательно этот пост, я понял, насколько бесполезны знания, которые я приобрел за год изучения МатКада в универе.
Дааавно примерно такую вещицу реализовывал на делфи то ли 6 то ли 5)) Радости были полные штаны)))
Ооо да, старая тема. Я в своё время тоже практиковал 3D графику. только строил игровые движки. Но мне понравились формулы здесь
Лет 10 назад тоже увлекался подобными вещами. Эй, как же время быстро летит…
Не поверите, но у меня диплом такой был — про вращающийся куб. А я то уже динозавр:) Так что Маткад ваш — прошлый век!
Просто есть разные задачи и цели
теперь я знаю как это делается. Матрицы вот оказываются для чего нужны. Кубы вращать.
Насколько понял один угол зафиксирован?
Очень интересная статья! Всегда для меня была загадка как же заставить вращаться куб)