.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);
}