.NET 4.x Кривая Серпинского: как строить линии и что использовать для рисования - C#
Формулировка задачи:
Дали мне курсовую "Кривые Серпинского" и условие, что будет написано на C#.А я в C# работаю всего ничего, месяца полтора. Не могу понять, как строить линии и что использовать для рисования(DrawLine или еще что то) в форме.
Вопрос: как использовать по аналогии программы, написанной на паскале(указанной ниже) функцию
Linerel(h, h)
. И как сделать так, чтобы графический курсор установился в начальное положение?, т.е. нужно, чтобы фигура рисовалась от определенной точки. На паскале я это реализовал так:Uses CRT,Graph; const del=5000;{Время задержки} Var d,r: integer; n: byte; Xlu,Ylu,Hscr,Wscr,A,x0,y0,h,Z: word; PrA:real; function calcZ(i:byte):word; {Функция, рекурсивно вычисляющая коэффициент диагонали кривой Серпинского} begin if i=0 then calcZ:=1 else calcZ:=2*calcZ(i–1)+3; end; {Процедуры рисования наклонных, горизонтальных и вертикальных отрезков кривой} Procedure SegmBC; begin Linerel(h, h) end; Procedure SegmDE; begin Linerel(-h, h) end; Procedure SegmFG; begin Linerel(-h, -h) end; Procedure SegmHA; begin Linerel(h, -h) end; Procedure SegmEast; begin Linerel(2*h, 0) end; Procedure SegmSouth; begin Linerel(0, 2*h) end; Procedure SegmWest; begin Linerel(-2*h, 0) end; Procedure SegmNord; begin Linerel(0, -2*h) end; {Pекурсивные процедуры рисования четырех частей кривой Серпинского} Procedure LineCD(i: byte); forward; Procedure LineGH(i: byte); forward; Procedure LineEF(i: byte); forward; Procedure LineAB(i: byte); begin if i>0 then begin LineAB(i-1); SegmBC; LineCD(i-1); SegmEast; LineGH(i-1); SegmHA; LineAB(i-1); delay(del); end end; Procedure LineCD; begin if i>0 then begin LineCD(i-1); SegmDE; LineEF(i-1); SegmSouth; LineAB(i-1); SegmBC; LineCD(i-1); delay(del); end end; Procedure LineEF; begin if i>0 then begin LineEF(i-1); SegmFG; LineGH(i-1); SegmWest; LineCD(i-1); SegmDE; LineEF(i-1); delay(del); end end; Procedure LineGH; begin if i>0 then begin LineGH(i-1); SegmHA; LineAB(i-1); SegmNord; LineEF(i-1); SegmFG; LineGH(i-1); delay(del); end end; BEGIN {Основной программы} clrscr; {Чистка экрана} write('Введите длину стороны опорного квадрата'); write('в % от высоты экрана '); readln(PrA); write('Введите порядок кривой '); readln(n); d:=detect; initgraph(d, r, ''); {Переход в графический режим} Hscr:=GetMaxY+1; Wscr:=GetMaxX+1;{Высота и ширина экрана} Z:=calcZ(n); {Коэффициент диагонали кривой Серпинского} h:=round(A/(S+1)); {Проекция наклонного отрезка} {Находим координаты левой верхней точки опорного квадрата} Xlu:=Wscr div 2 - a div 2; Ylu:=Hscr div 2 - a div 2; {Находим координаты начальной точки кривой} y0:=Ylu; x0:=Xlu+h; moveto(x0, y0); {Ставим графический курсор в начальную точку} {Строим кривую} LineAB(n); SegmBC; LineCD(n); SegmDE; LineEF(n); SegmFG; LineGH(n); SegmHA; readln;{Выход - нажатием клавиши Enter} closegraph;{Переход в текстовый режим} END.
Проще говоря, как это прописать в C#:
moveto(x,y); linerel(h,-h);
Решение задачи: «.NET 4.x Кривая Серпинского: как строить линии и что использовать для рисования»
textual
Листинг программы
private void Panel_Paint(object sender, PaintEventArgs e) { Graphics dc=e.Graphics; dc.DrawLine(new Pen(Color.Blue, 2),x1,y1,x2,y2); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д