0 / 0 / 0
Регистрация: 27.10.2017
Сообщений: 14
1

Нарисовать фигуру

11.10.2019, 18:26. Показов 956. Ответов 5
Метки нет (Все метки)

Здравствуйте.
Не могли бы вы помочь в решении задачи.
Представим себе что в центре экрана сидит жучок, который может перемещаться по прямой на указанное расстояние, и перемещаться налево и направо. У жучка есть перо которое может оставлять след, повторяющий движения жучка. Если перо опущено след остаётся, если перо поднято следа нет. Итак, жучок может выполнять следущие приказы: Forward-переместиться на заданое расстояние; Left-повернуть налево на заданный угол; Right-повернуть направо на заданый угол; PenUp-поднять перо ; PenDown-опустить перо. Реализовать процедуры Forward, Left, Right, PenUp, PenDown. Процедуры должны взаимодействовать через глобальные переменные xPos, yPos-координаты жучка на экране; Pen-признак , говорящий о том поднято перо или опущенно; Angle--угол, который образует текущее направление перемещения жучка с осью абцисс.
Нарисовать фигуру состоящую из 15 квадратов.
Вот что попытался сделать:
C#
1
2
3
4
5
6
7
8
9
 Bitmap bmp = new Bitmap(640, 480);
            using (Graphics gr = Graphics.FromImage(bmp))
            {
 
                gr.FillRectangle(Brushes.White,
                    new Rectangle(0, 0, bmp.Size.Width, bmp.Size.Height));
                gr.FillRectangle(Brushes.White, new Rectangle(100, 100, 10, 10));
                bmp.Save("1.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
            }
Изображения
 
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.10.2019, 18:26
Ответы с готовыми решениями:

Нарисовать фигуру Лиссажу
Помогите срочно ребят,Нужно нарисовать фигуру Лиссажу в C#,центр которой находжится в начале...

Нарисовать необычную фигуру
Необходимо нарисовать вот это. Для этого нужно знать все линии каждого сегмента т.е. массив линий...

Нарисовать фигуру из треугольников
Здравствуйте, форумчане! Задали курсовую, но уже полторы недели голову ломаю, как её сделать....

Как нарисовать простую фигуру и сохранить в файл
Мне нужно, чтобы по нажатии кнопки у меня создался файл, например 111.bmp, и в нём на позиции 100,...

5
Злой няш
2008 / 1429 / 524
Регистрация: 05.04.2010
Сообщений: 2,698
12.10.2019, 01:55 2
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
using System;
using System.Drawing;
using System.Drawing.Imaging;
 
using static System.MathF;
 
namespace Demo
{
    public class Program
    {
        private const string FileName = "image.png";
        private const int NumberOfSquares = 15;
        private const float SquareSize = 125f;
        private const float CircleRadius = 300f;
 
        private const float ImageWidth = CircleRadius * 2f;
        private const float ImageHeight = CircleRadius * 2f;
 
        const float Angle90 = PI / 2f;
        const float StepAngle = 2f * PI / NumberOfSquares;
 
        private static readonly Color backgroundColor = Color.White;
        private static readonly Pen linePen = new Pen(Brushes.Black, 2f);
 
        private static float xPos = CircleRadius;
        private static float yPos = CircleRadius;
        private static float angle = 0;
        private static bool isPainting = false;
 
        public static void Main()
        {
            using var bitmap = new Bitmap((int)ImageWidth, (int)ImageHeight);
            using var graphics = Graphics.FromImage(bitmap);
            graphics.Clear(backgroundColor);
 
            var firstSquareDistance = Sqrt(Pow(SquareSize / 2f, 2f) + Pow(CircleRadius, 2f));
            var firstSquareAngle = Asin(SquareSize / firstSquareDistance / 2f) + Angle90;
            Left(firstSquareAngle);
            Forward(graphics, firstSquareDistance);
            Right(firstSquareAngle);
 
            DrawSquare(graphics);
            for (var i = 1; i < NumberOfSquares; i++)
            {
                Right(Angle90);
                Forward(graphics, SquareSize);
                Right(StepAngle);
                DrawSquare(graphics);
            }
 
            bitmap.Save(FileName, ImageFormat.Png);
        }
 
        private static void DrawSquare(Graphics graphics)
        {
            PenDown();
            Forward(graphics, SquareSize);
            Right(Angle90);
            Forward(graphics, SquareSize);
            Right(Angle90);
            Forward(graphics, SquareSize);
            Right(Angle90);
            Forward(graphics, SquareSize);
            PenUp();
        }
 
        private static void PenUp()
        {
            Console.WriteLine("PenUp");
            isPainting = false;
        }
 
        private static void PenDown()
        {
            Console.WriteLine("PenDown");
            isPainting = true;
        }
 
        private static void Left(float rotateAngle)
        {
            Console.WriteLine($"Left {rotateAngle:0.###} rad");
            angle -= rotateAngle;
        }
 
        private static void Right(float rotateAngle)
        {
            Console.WriteLine($"Right {rotateAngle:0.###} rad");
            angle += rotateAngle;
        }
 
        private static void Forward(Graphics graphics, float distance)
        {
            Console.WriteLine($"Forward {distance:0.###}");
            var oldXPos = xPos;
            var oldYPos = yPos;
            xPos += distance * Cos(angle);
            yPos += distance * Sin(angle);
            if (isPainting)
            {
                graphics.DrawLine(linePen, oldXPos, oldYPos, xPos, yPos);
            }
        }
    }
}
0
0 / 0 / 0
Регистрация: 27.10.2017
Сообщений: 14
12.10.2019, 06:08  [ТС] 3
Спасибо, но с вашим кодом возникли проблемы, выдает много ошибок
0
Злой няш
2008 / 1429 / 524
Регистрация: 05.04.2010
Сообщений: 2,698
12.10.2019, 11:53 4
x-total, надо в VS 2019 создать новый проект:
Нарисовать фигуру

... скопировать 1 в 1 код и нажать на любой красный тип:
Нарисовать фигуру
1
0 / 0 / 0
Регистрация: 27.10.2017
Сообщений: 14
12.10.2019, 17:07  [ТС] 5
I2um1, а возможно запустить на более ранних версиях? Например на VS 2017?
0
Злой няш
2008 / 1429 / 524
Регистрация: 05.04.2010
Сообщений: 2,698
15.10.2019, 09:55 6
x-total, разницы почти нет:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
using System;
using System.Drawing;
using System.Drawing.Imaging;
 
using static System.Math;
 
namespace Demo
{
    public class Program
    {
        private const string FileName = "image.png";
        private const int NumberOfSquares = 15;
        private const double SquareSize = 125d;
        private const double CircleRadius = 300d;
 
        private const double ImageWidth = CircleRadius * 2d;
        private const double ImageHeight = CircleRadius * 2d;
 
        private const double Angle90 = PI / 2d;
        private const double StepAngle = 2d * PI / NumberOfSquares;
 
        private static readonly Color backgroundColor = Color.White;
        private static readonly Pen linePen = new Pen(Color.Black, 2f);
 
        private static double xPos = CircleRadius;
        private static double yPos = CircleRadius;
        private static double angle = 0d;
        private static bool isPainting = false;
 
        public static void Main()
        {
            using (var bitmap = new Bitmap((int)ImageWidth, (int)ImageHeight))
            using (var graphics = Graphics.FromImage(bitmap))
            {
                graphics.Clear(backgroundColor);
 
                var firstSquareDistance = Sqrt(Pow(SquareSize / 2d, 2d) + Pow(CircleRadius, 2d));
                var firstSquareAngle = Asin(SquareSize / firstSquareDistance / 2d) + Angle90;
                Left(firstSquareAngle);
                Forward(graphics, firstSquareDistance);
                Right(firstSquareAngle);
 
                DrawSquare(graphics);
                for (var i = 1; i < NumberOfSquares; i++)
                {
                    Right(Angle90);
                    Forward(graphics, SquareSize);
                    Right(StepAngle);
                    DrawSquare(graphics);
                }
 
                bitmap.Save(FileName, ImageFormat.Png);
            }
        }
 
        private static void DrawSquare(Graphics graphics)
        {
            PenDown();
            Forward(graphics, SquareSize);
            Right(Angle90);
            Forward(graphics, SquareSize);
            Right(Angle90);
            Forward(graphics, SquareSize);
            Right(Angle90);
            Forward(graphics, SquareSize);
            PenUp();
        }
 
        private static void PenUp()
        {
            Console.WriteLine("PenUp");
            isPainting = false;
        }
 
        private static void PenDown()
        {
            Console.WriteLine("PenDown");
            isPainting = true;
        }
 
        private static void Left(double rotateAngle)
        {
            Console.WriteLine($"Left {rotateAngle:0.###} rad");
            angle -= rotateAngle;
        }
 
        private static void Right(double rotateAngle)
        {
            Console.WriteLine($"Right {rotateAngle:0.###} rad");
            angle += rotateAngle;
        }
 
        private static void Forward(Graphics graphics, double distance)
        {
            Console.WriteLine($"Forward {distance:0.###}");
            var oldXPos = xPos;
            var oldYPos = yPos;
            xPos += distance * Cos(angle);
            yPos += distance * Sin(angle);
            if (isPainting)
            {
                graphics.DrawLine(linePen, (float)oldXPos, (float)oldYPos, (float)xPos, (float)yPos);
            }
        }
    }
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.10.2019, 09:55

Нарисовать фигуру из треугольников, координаты, которых находятся в массиве
Здравствуйте! Есть код using System; using System.Collections.Generic; using...

Нарисовать квадрат, а в середине фигуру, которую можно перетаскивать
нужно нарисовать квадрат а в середине её фигуру которую можна в дальнейшем перетаскивать, может...

Нарисовать фигуру с помощью исполнителя "Черепаха"
написать программу - цикл с исполнителем черепаха:

Нарисовать фигуру состоящую из 10 треугольников
Люди добрые, подскажите как: Нарисовать фигуру состоящую из 10 треугольников при этом нужно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.