Фрактал, кривая Госпера. Ошибка, видимость переменных. Перевод с Паскаля на VB6
Формулировка задачи:
Задача была такая написать программу на VB переведя
ее с Pascal ABC. Эта программа рисует фрактал Госпера.
Сначала я перевел программу на Turbo Pascal. Запустил.
Все работает верно. Потом перевел на VB6. Он тоже что-то
нарисовал - на фрактал не похож.
Анализ.
В программе на Паскале одна процедура вложена в другую
Там ИНОЙ УРОВЕНЬ ВИДИМОСТИ ПЕРЕМЕННЫХ. Мне такое
первый раз встретилось.
Не пошел на поклон к Паскалю. Подумал. Чем наши ребята
хуже - помогут и подскажут в чем ошибка.
Привожу обе программы. Как на Паскале, так и на Бейсике.
Верю. Будет фрактал "кривая Госпера" и у нас!!
Это программа на VB6 (перевод с Turbo Pascal)
Листинг программы
- uses crt, graph;
- Var Driv : Integer;
- Mode : Integer;
- procedure D(x, y, l, u: real; t, q: integer);
- procedure D2(var x, y: real; l, u: real; t, q: integer);
- begin
- D(x, y, l, u, t, q);
- x:= x + l * cos(u);
- y:= y - l * sin(u)
- end;
- begin
- if t > 0 then begin
- if q = 1 then begin
- x:= x + l * cos(u);
- y:= y - l * sin(u);
- u:= u + pi
- end;
- u:= u - 2 * pi / 19;
- l:= l / sqrt(7);
- D2(x, y, l, u, t - 1, 0);
- D2(x, y, l, u + pi / 3, t - 1, 1);
- D2(x, y, l, u + pi, t - 1, 1);
- D2(x, y, l, u + 2 * pi / 3, t - 1, 0);
- D2(x, y, l, u, t - 1, 0);
- D2(x, y, l, u, t - 1, 0);
- D2(x, y, l, u - pi / 3, t - 1, 1);
- end
- else
- line(round(x), round(y), round(x + l * cos(u)), round(y - l * sin(u)))
- end;
- BEGIN
- clrscr;
- Driv:= Detect;
- InitGraph(Driv, Mode, '');
- D(100,355,400,0,4,0);
- repeat until KeyPressed;
- CloseGraph;
- END.
Листинг программы
- Option Explicit
- Const pi = 3.14159265
- Dim x!, y!, l!, u!, t!, q!
- Private Sub cmdD_Click()
- Scale (0, -100)-(640, 480)
- Call D(300, 155, 400, 0, 4, 0)
- End Sub
- Private Sub D(x, y, l, u, t, q)
- If t > 0 Then
- If q = 1 Then
- x = x + l * Cos(u)
- y = y - l * Sin(u)
- u = u + pi
- End If
- u = u - 2 * pi / 19
- l = l / Sqr(7)
- Call D2(x, y, l, u, t - 1, 0)
- Call D2(x, y, l, u + pi / 3, t - 1, 1)
- Call D2(x, y, l, u + pi, t - 1, 1)
- Call D2(x, y, l, u + 2 * pi / 3, t - 1, 0)
- Call D2(x, y, l, u, t - 1, 0)
- Call D2(x, y, l, u, t - 1, 0)
- Call D2(x, y, l, u - pi / 3, t - 1, 1)
- Else
- Line (x, y)-(x + l * Cos(u), y - l * Sin(u))
- End If
- End Sub
- Sub D2(ByVal x, ByVal y, ByVal l, ByVal u, ByVal t, ByVal q)
- Call D(x, y, l, u, t, q)
- x = x + l * Cos(u)
- y = y - l * Sin(u)
- End Sub
- Private Sub Form_DblClick()
- SavePicture Image, "1.bmp"
- End Sub
Решение задачи: «Фрактал, кривая Госпера. Ошибка, видимость переменных. Перевод с Паскаля на VB6»
textual
Листинг программы
- Private Sub D(ByVal x!, ByVal y!, ByVal l!, ByVal u!, ByVal t&, ByVal q&)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д