Вращение объектовDelphi , Графика и Игры , CanvasВращение объектов
Автор: Айткулов Павел Здесь я бы хотел рассказать не о том, как работать с DelphiX, OpenGL или Direct, а о том, как можно вращать многогранники с помощью простых действий: moveto и lineto. Здесь рассмотрим пример вращения куба. Будем рисовать на Canvase (например Listbox). Сначала нарисуем врашающийся квадрат (точнее 2 квадрата и соединим их). Пусть q - угол поворота квадрата, который мы рисуем. Очевидно, что нам надо задать координаты вершин квадрата - a:array [1..5,1..2] of integer. 1..4+1 - количество вершин квадрата (почему +1 будет объяснено позже). 1..2 - координата по X и Y. Кто учился в школе, наверное помнит, что уравнение окружности: X^2+Y^2=R^2, кто хорошо учился в школе, возможно вспомнит уравнение эллипса: (X^2)/(a^2)+ (Y^2)/(b^2)=1. Но это нам не надо. Нам понадобится уравнение эллипса в полярных координатах: x=a*sin(t); y=a*cos(t);t=0..2*PI; (учащиеся университетов и институтов ликуют). С помощью данного уравнения мы заполняем массив с координатами.
Сейчас будем рисовать квадрат:
Вот почему array[1..5,1..2], иначе - выход за границы. end; Затем рисуем второй такой же квадрат, но пониже (или повыше). Соединяем линиями первый со вторым:
Осталось очистить Listbox, увеличить q и сделать сначала. Все!!! Можно также скрывать невидимые линии - когда q находится в определенном интервале. Также можно поизвращаться: повернуть куб в другой плоскости - поворот осей(для тех, кто знает формулу). Вот что у нас получилось: Такие же вращающиеся кубики (додекаэдр, икосаэдр и 3 других (не знаю названия)) находятся здесь. В статье рассказывается о создании вращающегося многогранника с помощью простых действий moveto и lineto на примере куба, рисуемого на Canvas. Комментарии и вопросыМатериалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
|
|||||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |