Перевод кода Pascal ABC на язык C# (Рисование архимедовой спирали)

Узнай цену своей работы

Формулировка задачи:

uses crt,graphABC;
var xc,yc,x,y,k:integer;
    r,f:real;
begin
repeat
write('k [5..20] k=');readln(k);
until k in [5..20];
xc:=windowwidth div 2;
yc:=windowheight div 2;
line(0,yc,2*xc,yc);
line(xc,0,xc,2*yc);
f:=0;
while f<=4*pi do//fi>0, правая спираль
 begin
  r:=k*f;
  x:=round(xc+r*cos(f));
  y:=round(yc-r*sin(f));
  putpixel(x,y,14);
  f:=f+0.001;
 end;
{while f>=-4*pi do//fi<0, левая спираль
 begin
  r:=k*f;
  x:=round(xc+r*cos(f));
  y:=round(yc-r*sin(f));
  putpixel(x,y,14);
  f:=f-0.001;
 end;}
end.

Решение задачи: «Перевод кода Pascal ABC на язык C# (Рисование архимедовой спирали)»

textual
Листинг программы
using System;
using System.Drawing;
using System.Windows.Forms;
 
namespace WindowsForms
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            pictureBox1.Image = new Bitmap(400, 400);
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            int k;
            if (!int.TryParse(textBox1.Text, out k) || k < 5 || k > 20)
            {
                MessageBox.Show("Введите число от 5 до 20!");
                return;
            }
 
            var graphics = Graphics.FromImage(pictureBox1.Image);
            DrawArhimed(graphics, pictureBox1.Image.Size, k);
            pictureBox1.Invalidate();
        }
 
        public static void DrawArhimed(Graphics graphics, Size size, int k)
        {
            const double TWO_PI = 2 * Math.PI;
            const double STEP = TWO_PI / 360;
            const int COUNT_CIRCULUS = 4;
            const int SCALE = 10;
 
            var pen = new Pen(Color.Green);
            int centerX = size.Width >> 1, centerY = size.Height >> 1;
 
            graphics.Clear(Color.White);
            graphics.DrawLine(pen, 0, centerY, centerX << 1, centerY);
            graphics.DrawLine(pen, centerX, 0, centerX, centerY << 1);
 
            int oldX = centerX, oldY = centerY;
            for (double i = 0; i < COUNT_CIRCULUS * TWO_PI; i += STEP)
            {
                var p = SCALE * i / TWO_PI * k;
                var x = (int)(p * Math.Cos(i)) + centerX;
                var y = (int)(p * Math.Sin(i)) + centerY;
                graphics.DrawLine(pen, oldX, oldY, x, y);
                oldX = x;
                oldY = y;
            }
        }
    }
}

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


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

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

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