Уроки, алгоритмы, программы, примеры

Вход на сайт

Материалы по разделам

Построения
на плоскости (2D)
Графика
в пространстве (3D)
Вычислительная
геометрия
Физическое
моделирование
Фрактальная
графика

Новые комментарии

torrvic, возможно, Вам нужно добавить -lGLU
Извините за тупой вопрос. У меня при сборке Вашего примера выходит ошибка: "undefined reference to gluLookAt". Не могу найти в какой библиотеке находится эта функция. У меня задано: -lGL -lglut ... Искал в /usr/lib таким образом: nm lib*so* | grep...
Здравствуйте. Спасибо за проект. У меня вопрос, по какой причине определение принадлежности точки многоугольнику работает некорректно, если координаты из больших чисел состоят, например: int[] vertex = new int[] {...
Сейчас проверила нашла причину не запускания // Создание контекста воспроизведения OpenGL и привязка его к панели на форме OpenGLControl1:=TOpenGLControl.Create(Self); with OpenGLControl1 do begin Name:='OpenGLControl1'; //вот тут...
Ну..кажется что то пошло не так http://pp.usera...

Счетчики и рейтинг

Рейтинг@Mail.ru
Скриншот к примеру
Среда программирования: 
Visual Studio 2013

В данном примере строится многоугольник по количеству сторон n, координатам центра многоугольника и расстоянию R от центра многоугольника до его стороны. Все эти данные вводятся пользователем и начинают обрабатываться по нажатию кнопки "Построить". Программа позволяет рисовать на одной форме многоугольники с различными параметрами.

Функция button1_Click получает входные параметры и обрабатывает их на корректность. В случае некорректных данных: отрицательного количества сторон или отрицательного расстояния программа сообщает о некорректности данных (в случае ввода отрицательных координат многоугольник смещается относительно области видимости и при определённых значениях может полностью оказаться вне зоны видимости(вне формы), как и в случае ввода достаточно большого значения расстояния). Если данные, введённые пользователем корректны, то управление переходит к функции lineAngle, которая производит непосредственно построение многоугольника.

Код программы: 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace pravilnyy_mnogougolnik
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        int n;//количество сторон
        int R;//расстояние от центра до стороны
        Point Cntr;//центр
        Point[] p; //массив точек будущего многоугольника
        //создаём массив точек нашего многоугольника
        private void lineAngle(double angle)
        {
            double z = 0; int i=0;
            while (i<n+1)
            {
 
                p[i].X=Cntr.X+(int)( Math.Round(Math.Cos(z/180*Math.PI)*R) );
                p[i].Y=Cntr.Y-(int)( Math.Round(Math.Sin(z/180*Math.PI)*R) );
                z=z+angle;
                i++; 
            }
        }
 
 
        private void button1_Click(object sender, EventArgs e)
        {
            label10.Text = "";
            //получаем входные данные и проверяем их на корректность
            n = Convert.ToInt32(textBox4.Text);
            R = Convert.ToInt32(textBox5.Text);
            Cntr.X = Convert.ToInt32(textBox6.Text);
            Cntr.Y = Convert.ToInt32(textBox7.Text);
            if (n < 0 || R < 0)
                label10.Text = "Неверные входные данные!";
            else //входные данные корректны, рисуем многоуголник
            {
                p = new Point[n + 1];
                lineAngle((double)(360.0 / (double)n));
                int i = n;
                Graphics g = pictureBox2.CreateGraphics();
                while (i > 0)
                {
                    g.DrawLine(new Pen(Color.Black, 2), p[i], p[i - 1]);
                    i = i - 1;
                }
            }
        }
 
        //оставляем нарисованный многоугольник, обнуляем входные значения для нового ввода
        private void button2_Click(object sender, EventArgs e)
        {
            textBox4.Text = "0";
            textBox5.Text = "0";
            textBox6.Text = "0";
            textBox7.Text = "0";
            label10.Text = "";
 
        }
        //стираем всё нарисованное, не обнуляя последние входные данные
        private void button3_Click(object sender, EventArgs e)
        {
            pictureBox2.Image = null;
            label10.Text = "";
        }
    }
}

Прикрепленный файлРазмер
pashaeva_mavile_pravilnyy_mnogougolnik.zip57.47 кб