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

Вход на сайт

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

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

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

Здравствуйте. Спасибо за проект. У меня вопрос, по какой причине определение принадлежности точки многоугольнику работает некорректно, если координаты из больших чисел состоят, например: int[] vertex = new int[] {...
Сейчас проверила нашла причину не запускания // Создание контекста воспроизведения OpenGL и привязка его к панели на форме OpenGLControl1:=TOpenGLControl.Create(Self); with OpenGLControl1 do begin Name:='OpenGLControl1'; //вот тут...
Ну..кажется что то пошло не так http://pp.usera...
Пример, к которому вы оставили комментарий строит именно то самое изображение на языке с#, которое вам необходимо. Отличается только цветовая палитра.

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

Рейтинг@Mail.ru
Скриншот к примеру
Среда программирования: 
Lazarus IDE v1.2.6

Построение вложенных спиральных квадратов. На форме находится кнопка, по нажатию на которую, сначала рассчитываются координаты, начиная с правой нижней точки, двигаясь по часовой стрелке, заканчивая верхней правой точкой. Координаты первой точки рассчитываются по формуле:
x = x0 + c * cos(b + 1*pi/4)
y = y0 + c * sin(b + 1*pi/4)

Координаты трёх следующих точек рассчитываются по этой же формуле, только при расчете каждой следующей координаты мы прибавляем и умножаем 2 ко второму слагаемому в скобке. Т.е. вторая точка будет иметь координаты:
x = x0 + c * cos(b + 3*pi/4)
y = y0 + c * sin(b + 3*pi/4)

И так далее, вплоть до 4 точки.
Переменная "c" рассчитывается по формуле:c:=x*sin(pi/3), для каждого следующего квадрата эта переменная получается путем умножения ее предыдущего значения на sin(pi/3). Переменная х была найдена экспериментальным путем.
Переменная "b" рассчитывается по формуле: b := pi/19, для каждого следующего квадрата эта переменная получается путем сложения ее предыдущего значения с sin(pi/19).

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

unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Buttons,
  ExtCtrls;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    PaintBox1: TPaintBox;
    procedure BitBtn1Click(Sender: TObject);
   procedure Square(c, b: Real);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
  i : Integer;//Переменная используемая в цикле, обозначает кол-во проходов
  l,a  : Real;//Переменные используемые для построения каждого квадрата
 
const
 
  d0  = 283;{Константа, влияющая на расстояние от
                центра квадрата до углов(Не диагональ),
                подобрана экспериментальным путем }
  //Координаты центра квадрата
  x0  = 200;
  y0  = 200;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
procedure TForm1.Square(c, b: Real); //функция построения и отрисовки квадрата
var
	x1, y1,x2,y2,x3,y3,x4,y4: Integer;
begin
	x1 := Round(x0 + c * cos(b + pi/4));
	y1 := Round(y0 + c * sin(b + pi/4));   //Координаты правой нижней точки
	x2 := Round(x0 + c * cos(b + 3*pi/4));
	y2 := Round(y0 + c * sin(b + 3*pi/4));  //Координаты левой нижней точки
	x3 := Round(x0 + c * cos(b + 5*pi/4));
	y3 := Round(y0 + c * sin(b + 5*pi/4)); //Координаты левой верхней точки
	x4 := Round(x0 + c * cos(b + 7*pi/4));
	y4 := Round(y0 + c * sin(b + 7*pi/4)); //Координаты правой верхней точки
        //Метод строящий фигуру по 4 точкам
        PaintBox1.Canvas.Polygon([Point(x1,y1),Point(x2,y2),
                                          Point(x3,y3),Point(x4,y4)]);
end;
 
 
procedure TForm1.BitBtn1Click(Sender: TObject);{Функция построения квадратов
      с заданными параметрами по нажатию кнопки }
begin
   l := d0;
	a := 0;
	 for i:=1 to 30 do //Цикл, рисующий 30 квадратов
         begin
 
                Square(l, a); //Вызов функции построения и отрисовки квадрата
                a := a + pi/19;//изменяет угол поворота следующих квадратов
                l:=l*sin(pi/3);//изменяет размер следующих квадратов
         end;
 
end;
 
end.
 

Прикрепленный файлРазмер
Spir_Kvadrat.zip638.24 кб