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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.917 из 5
Похожие ответы