Нарисовать поворачивающийся "подсолнух " в паскаль
Задание «Подсолнух» - нарисовать подсолнух и солнце на небосклоне. солнце движется слева направо по верху экрана, а цветок подсолнуха вращается за ним. Я написал такую программу:
program test;
uses
crt,
graphABC;
var
x: integer;
begin
while x < 640 do
begin
Window.Clear;
setpencolor(clyellow);
setBrushColor(clyellow);
circle(x, 100, 50);
Setpencolor(clgreen);
Setpenwidth(4);
Line(300, 330, 300, 400);
Line(300, 400, 330, 330);
Line(300, 400, 280, 330);
Setpencolor(clyellow);
setBrushColor(clorange);
circle(300, 300, 30);
x := x + 5;
delay(100);
end;
end.
Но у меня проблема.Я смог нарисовать солнце которое движется и стебель с цветком.Но я не знаю как сделать так, чтоб цветок подсолнуха двигался за солнцем. Мне написали, что
нужно использовать для подсолнуха вместо процедуры круга: procedure Ellipse(x1, y1, x2, y2: integer); Рисует заполненный прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2) - сделать уменьшение (сужение) прямоугольника, в который вписывается эллипс, по Х (х1 и х2 - уменьшать в цикле) и тогда будет иллюзия поворота подсолнуха
. Но я все равно не понимаю как это сделать. Кто знает помогите пожалуйста.
Ответы (1 шт):
Какие должны быть рассуждения:
Когда солнце близко, то круг максимальный, солнце далеко - цветок боком, то есть одна линия. Чтобы узнать на сколько поворачивается цветок необходимо рассчитать коэффициент подобия, не забываем что рассматриваем половину пути и не допускаем обнуления (уменьшаем диаметр на один) получается 29 / (640 /2). Координата x у нас просто возрастает, а диаметр сначала увеличивается затем уменьшается, я просто сместил начало координат для цветка.
В итоге
var
s: integer;
...
s := 30 - Round((29 / (640 / 2)) * Abs(x - (640 / 2)));
Ellipse(300 - s, 300 - 30, 300 + s, 300 + 30);
Никак не упрощал, не вводил перменные, чтобы было понятно.