Страница 1 из 1

Работа с канвой на Delphi

Добавлено: 16 май 2010, 12:45
Slapman
Ребята, помогите не въезжаю в эту задачу:
Имеется центральная планета П с рядом спутников, у каждого из которых свои спутники, у тех - свои и т.д. Очевидно, что каждый спутник может рассматриваться как планета с соответствующими спутниками. Изобразить на экране модель планетарной системы, подчиняющейся данному алгоритму, если уровней вложенности N, а соответствующий алгоритм изображения имеет вид:
алг Планета (арг цел x, y, рад, н, нсп, вещ к_орб, к_спут)
// х, у - координаты планеты; рад - ее радиус
// нсп - число спутников у каждой планеты
// к_спут - отношение радиуса спутника к радиусу “своей” планеты
// к_орб - то же для радиуса орбиты спутников.
нач цел i, x1, e1, вещ угол, рад_орб
если н>0 то
поз (х,у) // центр планеты
окружность (рад) // планета
рад_орб := рад*к_орб //радиус орбиты спутников
угол := 6.28 / нсп //угол между спутниками
нц для i от 1 до нсп //для каждого спутника
x1 := x + рад_орб*cos (угол*i) // координаты центра i-го спутника
у1 := y + рад_орб*sin (угол*i)
// вызываем алгоритм Планета с новыми аргументами
Планета (x1, y1, int(рад*к_спут), н-1 нсп, к_орб, к_спут)
кц
все
кон
заранее спасибо, если просвятите меня)) ну или решите))

Re: Работа с канвой на Delphi

Добавлено: 17 май 2010, 14:19
Хыиуду
А что непонятно в этом коде? Работа с канвой здесь - одна функция рисования окружности, все остальное - чистая математика. Алгоритм вполне рабочий, хоть и сложночитаемый.

Re: Работа с канвой на Delphi

Добавлено: 17 май 2010, 16:05
Slapman
Вот именно) Просто объяснил бы кто-нить, что и как, а то я в таких дебрях на кириллице не очень...(

Re: Работа с канвой на Delphi

Добавлено: 18 май 2010, 09:26
Хыиуду
function Planet (x,y, rad, n_sput, N:integer; k_orb, k_sput:real)
// х, у - координаты планеты; rad - ее радиус
// n_sput - число спутников у каждой планеты
// k_sput - отношение радиуса спутника к радиусу “своей” планеты
// k_orb - то же для радиуса орбиты спутников.
var i, x1, y1: integer; angle, r_orb: real;
begin
if n=0 then exit;
Form1.Canvas.Pen.Circle(x,y, rad); // Рисуем планету
r_orb := rad*k_orb; //радиус орбиты спутников
angle := 6.28 / n_sput; //угол между спутниками
for i:=1 to n_sput do //для каждого спутника
begin
x1 := round(x + r_orb*cos (angle*i)); // координаты центра i-го спутника
y1 := round(y + r_orb*sin (angle*i)); // координаты центра i-го спутника
// вызываем алгоритм Планета с новыми аргументами
planet (x1, y1, round(rad*k_sput), n_sput, N-1, k_orb, k_sput)
end;
end;