необходимо нарисовать вращающийся эллипс,
система координат произвольная.
видимо лучший способ- это через параметрическую систему к., но я не могу понять одну вещь
у нас есть ур-е эллипса
x=a*cos(t);
y=b*sin(t);
а как сделать чтобы он вращался?
подобную программу выкладывал Volvo:
для краткоси буду считать что cos и sin ,берут угол от градусов
X0,Y0- координаты центра
angl- угол поворота фигуры
i:=0 to 359 do
begin
cX:=a*cos(i);
cY:=b*sin(i);
X:=X0+cX*cos(angl)-cY*sin(angl);
Y:=Y0+cX*sin(angl)+cY*cos(angl);
end;
ну центр Х0 и У0 ето ясно, сХ и сУ тоже все ок, а почему для Х надо делать так:
сX*cos(angl)-cY*sin(angl) --это проекция так будет?
все понял как проецируется, BIG THNKS за программу
Да, это правильные формулы для эллипсаса.
Но можно вопрос: как это работает на Паскале?
всмысле? что значит как?
обычная программа с graph'ом, там задается уравнение эллипса и по точкам его рисуешь.
у меня прга- фигуры(точки, окружности, прямоугольники, линии и эллипсы) движутся и вращаются с переменной скоростью. фигур 30 движутся без тормозов, когда >40 то начинает лагать...
program El;
uses crt,graph;
var gd, gm, X0, Y0: Integer;
X,Y,cX,cY,a,b,i,angl: Real;
begin
gd := detect;
initgraph(gd, gm, '');
X0:=320; Y0:=240; i:=0;
a:=50; b:=150; angl:=0;
repeat
while i<360 do
begin
i:=i+0.5;
cX:=a*cos(i);
cY:=b*sin(i);
X:=X0+cX*cos(angl)-cY*sin(angl);
Y:=Y0+cX*sin(angl)+cY*cos(angl);
PutPixel(Round(X), Round(Y), 15);
end;
Delay(200); i:=0;
ClearDevice; angl:=angl+0.01;
until keypressed;
closegraph;
end.