LOGO
Главная Регистрация Вход RSS
Приветствую Вас, Гость
Категории раздела
Случайное решение
[05.05.2015][ЕГЭ (П)]
Найдите корень уравнения log(1/5)(5-x)=-2 (0)
[15.05.2015][ЕГЭ (П)]
На диаграмме показан средний балл участников 10 стран в тестиро¬вании учащихся 8-го класса по естествознанию в 2007 году (по 1000- балльной (0)
[10.01.2016][ЕГЭ (П)]
Первый сплав содержит 5% меди, второй — 11% меди. Масса второго сплава больше массы первого на 4 кг. Из этих двух сплавов получили третий сп (0)
[05.04.2015][ЕГЭ (П)]
В среднем из каждых 50 поступивших в продажу аккумуляторов 48 аккумуляторов заряжены. Найдите вероятность того, что куп¬ленный аккумулятор н (0)
[14.10.2015][ОГЭ]
На диаграмме представлены семь крупнейших по площади территории (в млн км2) стран мира. Какие из следующих утверждений верны? (0)
[11.04.2015][ЕГЭ (П)]
На диаграмме показана средняя температура воздуха в Симферо¬поле за каждый месяц 1988 года. По горизонтали указываются месяцы, по вертика (0)
[24.09.2015][ОГЭ]
В треугольнике ABC угол С равен 90°, ВС=2 sinA = 0,4. Найдите АВ. (0)
[13.10.2015][ЕГЭ (П)]
Площадь параллелограмма ABCD равна 3. Точка Н середина стороны AD. Найдите площадь трапеции АНСВ (0)
Статистика
Яндекс.Метрика
Поделиться
Реклама
Вход на сайт
Популярное
[14.10.2015][ОГЭ]
Площадь четырёхугольника можно вычислить по формуле s=d1*d2*sin a/2 , где d1 и d2 — длины диагоналей четырехугольника, а —угол между диа (0)
[11.03.2016][ОГЭ]
Найдите площадь квадрата, описанного около окружности радиуса 9. (0)
[21.12.2014][ЕГЭ (П)]
Диагональ правильной четырёхугольной призмы наклонена к плоскости основания под углом 30°. Боковое ребро равно 3. Найдите диагональ призмы. (0)
[15.04.2015][ЕГЭ (П)]
В прямоугольном параллелепипеде ABCDA1B1C1D1 известны длины рёбер: АВ = 3, AD = 4, АА1 = 32. Найдите площадь сечения, про¬ходящего через вер (0)
[14.10.2015][ОГЭ]
12. На клетчатой бумаге с размером клетки 1x1 изображён параллелограмм. Найдите его пло¬щадь (0)
[21.12.2014][ЕГЭ (П)]
Корень(9 - 4*корень(5)) - корень(5) или √9-4√5-√5 (0)
[11.02.2016][ОГЭ]
На клетчатой бумаге с размером клетки 1x1 изображена трапеция. Найдите длину её средней линии. (0)
[29.01.2016][ОГЭ]
Биссектриса равностороннего треугольника равна 9Корень(3) . Найдите его сторону. (0)
[21.12.2014][ЕГЭ (П)]
В случайном эксперименте симметричную монету бросают триж¬ды. Найдите вероятность того, что решка выпадет все три раза (0)
[14.10.2015][ОГЭ]
После уценки телевизора его новая цена составила 0,57 старой. На сколько процентов уменьшилась цена телевизора в результате уценки? (0)
Свидетельство
Главная » Статьи » Программирование » Pascal, Delphi, Lazarus

Рисование правильных многоугольников в Lazarus и Delphi

Для того чтобы построить правильный многоугольник, необходимо сначала разобраться из чего он состоит. Правильный многоугольник состоит из одинаковых отрезков и равных углов. Следовательно, необходимо знать длину стороны и угол между сторонами. Длину стороны можно задать любую, так как она будет влиять только на размер многоугольника. А вот угол будет меняться для каждого многоугольника. Чтобы вычислить угол необходимо воспользоваться формулой: (180*(n-2))/n. В этой формуле n – это количество углов. Тем самым меняя переменную n можно получить множество многоугольников.

Программирование начнем с создания интерфейса программы. Вот самый простой вариант:


На форме размещено:

    Button1: TButton;  \\ кнопка для рисования многоугольников

    Edit1: TEdit; \\ содержит количество углов

    Edit2: TEdit;  \\ содержит длину стороны

    Image1: TImage; \\ объект на котором будем рисовать

    Label1: TLabel;  \\ метка для описания интерфейса

    Label2: TLabel;   \\ метка для описания интерфейса

 Теперь необходимо разобраться, как же рисовать сами многоугольники.

Вначале необходимо нарисовать прямую линию нужного размера, это будет основа многоугольника. Затем нужно нарисовать линию того же размера но повернутую на угол вычисленный по формуле (180*(n-2))/n.

Для того чтобы повернуть линию будем использовать формулу:

x := Round(x + dim* cos(u));

y := Round(y - dim* sin(u));

Тут главная переменная u, которая содержит угол поворота линии.

Вот код который строит линию, повернутую на угол u:

form1.Image1.Canvas.Line(x, y, Round(x + dim * cos(u)), Round(y - dim * sin(u)));

x,y – начало линии.

Dim – длинна линии.

Если взять u=(108*(n-2))/n то при программировании не чего не получиться, так как в Lazarus  углы откладываются от одной и той же линии, которая является нулем.

Если построить две линии для u=0 и для u=(108*(n-2))/n, то получим:


Горизонтальная линия построенна при угле в нуль градусов. И вторая построенна при угле 0+(108*(n-2))/n

А нам необходим вот этот угол:


Этот угол найти нетрудно он равен 180-(108*(n-2))/n.

Теперь можно переходить к программированию. Вначале необходимо задать начальные значения переменных:

         x:=300;  \\ координата  x начала многоугольника

        y:=600;  \\ координата  y начала многоугольника

     count:=strtoint(edit1.Text);  \\ количество углов многоугольника

     dim:=strtoint(edit2.Text);  \\ длинна стороны многоугольника

     p:=pi-((pi*(count-2))/count); \\ вычисление угла в многоугольнике

     u:=0;  \\ значение угла для первой линии многоугольника

Далее необходимо задать цикл который будет строить линии постоянно поворачивая их на угол 180-(108*(n-2))/n, но так как нужно строить не от нуля мы будем прибавлять к старому углу новое значение.

Получим выражение

U:=u+p;

Так как p:= 180-(108*(n-2))/n,

Остается лишь построить линию с такими координатами. Вот весь код обработчика событий для кнопки:

procedure TForm1.Button1Click(Sender: TObject);

var

  i,dim,count,x,y:integer;

  u,p:real;

begin

        Image1.Canvas.Brush.Color:=clwhite;

  Image1.Canvas.Pen.Color:=clblue;

Image1.Canvas.Pen.Width:=5;

  Image1.Canvas.FillRect(0,0,form1.Width,form1.Height);

        x:=300;

        y:=600;

     count:=strtoint(edit1.Text);

     dim:=strtoint(edit2.Text);

     p:=pi-((pi*(count-2))/count);

     u:=0;

     for i:=1 to count do

       begin

           form1.Image1.Canvas.Line(x, y, Round(x + dim * cos(u)), Round(y - dim * sin(u)));\\ строим линию

           x := Round(x + dim* cos(u));\\вычисляем новые координаты

                   y := Round(y - dim* sin(u)); \\вычисляем новые координаты

           u:=u+p; \\ получаем новый угол

       end;

end;  

Окно рабочей программы:

Категория: Pascal, Delphi, Lazarus | Добавил: Ret-Ar (08.01.2014)
Просмотров: 4355 | Рейтинг: 0.0/0