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

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

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

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

У меня проблема вот с этим: gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);. Вылезает ошибка: CS1061 "object" не содержит определения "GL_COLOR_BUFFER_BIT", и не удалось найти доступный метод расширения "GL_COLOR_BUFFER_BIT",...
Большое спасибо. Единственный код который прошел без каких либо ошибок. Ура!!!
Скажите пожалуйста, подскажите алгоритм по которому по заданным точкам можно определить тип многогранника, скажем это куб или прямоугольный параллелепипед. Нашел теорию по этим фигурам: https://www.mat... https://www.mat... Акцентировать внимание...
Всем у кого не работает. файл wizard.script Ещё одно упоминание Glut32 в строке "if (!VerifyLibFile(dir_nomacro_lib, _T("glut32"), _T("GLUT's"))) return false;" меняем на "if (!VerifyLibFile(dir_nomacro_lib, _T("freeglut"), _T("GLUT's"))) return...
Не получается, емаё

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

Рейтинг@Mail.ru Яндекс.Метрика
Скриншот к примеру
Среда программирования: 
Lazarus
Статья по теме: 

Программа демонстрирует построение Канторового множества.

Для начала работы нужно ввести длину отрезка в соответствующее поле и нажать кнопку "Построить". При желании можно ввести новую длину и заново построить множество.

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

unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  ExtCtrls, Buttons;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    Edit1: TEdit;
    Label1: TLabel;
    PaintBox1: TPaintBox;
    procedure BitBtn1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
    procedure Draw_Kanter(x, y, Otrw:Double);
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
  //Отработка кнопки построения
procedure TForm1.BitBtn1Click(Sender: TObject);
Var
  Otr, x : Double;
begin
  //Очистка окна PaintBox
  PaintBox1.Canvas.Brush.Color := clWhite;
  PaintBox1.Canvas.FillRect(Canvas.ClipRect);
  //Считывание введенной длины отрезка
  Otr := StrToInt(Edit1.Text);
  //Расчет координаты по Х
  x := 610/2 - Otr/2;
  //Вызов функции отрисовки мн-ва Кантера
  Draw_Kanter(x,10,Otr);
end;
 
procedure TForm1.Draw_Kanter(x, y, Otrw :Double);
begin
  //Цвет кисти - черный
  PaintBox1.Canvas.Brush.Color := clBlack;
  //Выполнимо, пока отрезки не будут меньше 1
  if Otrw >= 1 then begin
  //Рисуем отрезок в виде прямоугольника, для наглядности
  PaintBox1.Canvas.Rectangle(round(x), round(y), round(x+Otrw), round(y-12));
  //Сдвигаемся вниз
  y := y + 40;
  //Рисуем следующие отрезки мн-ва, дроблением отрезка на 3 части
  Draw_Kanter(x + Otrw*2/3, y, Otrw/3);
  Draw_Kanter(x, y, Otrw/3);
    end;
end;
end.

Прикрепленный файлРазмер
Kanter.rar692.33 кб

Комментарии

kosmonavtom аватар
Опубликовано kosmonavtom в 10. Ноябрь 2019 - 7:59.

Спасибо за статью. Я не Ваш студент. Но мне она помогла написать функцию для Канторова множества на Python для черепашки:

import turtle
def kanter(x, y, d):
    if d > 1:
        turtle.penup() # Поднять хвост
        turtle.goto(x, y) # Иди в точку
        turtle.pendown() # Опусти хвост
        turtle.forward(d) # Иди вперед (рисуем новую линию)
        y -= 20 # Идем ниже для следующей линии
# Рисуем следующие отрезки мн-ва, дроблением отрезка на 3 части:
        kanter(x, y, d / 3)
        kanter(x + d * 2 / 3, y, d / 3)
turtle.shape('turtle') # Отображаемая фигура при рисовании
turtle.pensize(3) # Толщина линии
i = 567 # Длина линии нулевой итерации
kanter(-300, 200, i) # Запуск рекурсии (итерации отрезков длиной до 1)
turtle.done()