Въртящи се обекти, DelphiSite

Най-четени

Въртящи се обекти

Тук бих искал да говоря не за това как да работя с DelphiX, OpenGL или Direct, а за това как можете да завъртите полиедри с помощта на прости действия: moveto и lineto. Тук ще разгледаме пример за въртене на куб. Ще рисуваме върху Canvas (например Listbox). Първо, нека начертаем въртящ се квадрат (по-точно 2 квадрата и да ги свържем). Нека q е ъгълът на завъртане на квадрата, който чертаем. Очевидно трябва да зададем координатите на квадратните върхове - a:array [1..5,1..2] от цяло число. 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; (радват се студенти от университети и институти). С помощта на това уравнение попълваме масив с координати.

за i:= 1 до 5 направи

// X координата; q+i*pi/2 - ъгъл на завъртане

// i-ти връх на квадрата.

a [ i, 1 ] := trunc ( 80 * sin ( q+i* pi / 2 ) ) ;

// Y координата; знак минус - защото координатите

// броено от горния ляв ъгъл

a [ i, 1 ] := trunc ( -30 * cos ( q+i* pi / 2 ) ) ;

за i:= 1 до 4 направи

moveto (100 + a [i, 1], 50 + a [i, 2]); //Застанете на i-тата точка на квадрата.

lineto (100 + a [i +1, 1], 50 + a [i +1, 2]); //Начертайте линия до i+1-ва точка.

Ето защо array[1..5,1..2], иначе - извън границите. край; След това нарисувайте втори квадрат от същия тип, но по-нисък (или по-висок). Свързваме първия с втория с линии:

за i:= 1 до 4 направи

moveto (100 + a [i, 1], 50 + a [i, 2]);

lineto (100 +a [i, 1], 130 +a [i, 2]);

Остава да изчистите списъка, да увеличите q и да го направите отначало. Всичко. Можете също да скриете скрити линии - когато q е в определен интервал. Можете също да извратите: завъртете куба в друга равнина - завъртете осите (за тези, които знаят формулата).