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

Вход на сайт

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

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

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

Пример, к которому вы оставили комментарий строит именно то самое изображение на языке с#, которое вам необходимо. Отличается только цветовая палитра.
Добрый день! Уже и не знаю куда обратиться. Нужно построить фрактал Жулиа на языке программирования C#. Что бы получилось данное изображение
Необходимо дополнение, как все это запустить, Где писать все эти команды, чтобы видеть результат. Я имею ввиду, что необходимо продемонстрировать полный код HTML-страницы со скриптом и тегами холста. Может даже сделать Урок 0 "Как начать рисовать в...
КРУГОВОЙ ФРАКТАЛ -ОШИБОЧНАЯ ПРОГРАММА! ПАПА ЗибЕрт
Можешь обяснить подробно что как работает, и почему массу не задаем

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

Яндекс.Метрика Рейтинг@Mail.ru

Растровое изображение — это файл данных или структура, представляющая собой сетку пикселей или точек цветов (на практике прямоугольную) на компьютерном мониторе, бумаге и других отображающих устройствах и материалах.

Важными характеристиками изображения являются:

  • - количество пикселей. Может указываться отдельно количество пикселей по ширине и высоте (1024*768, 640*480,...) или же, редко, общее количество пикселей (обычно измеряется в мегапикселях);
  • - количество используемых цветов (или глубина цвета);
  • - цветовое пространство RGB, CMYK, XYZ, YCbCr и др.

Алгоритм Брезенхэма (англ. Bresenham's line algorithm) — это алгоритм, определяющий, какие точки двумерного растра нужно закрасить, чтобы получить близкое приближение прямой линии между двумя заданными точками. Это один из старейших алгоритмов в машинной графике — он был разработан Джеком Е. Брезенхэмом (Jack E. Bresenham) в компании IBM в 1962 году. Алгоритм широко используется, в частности, для рисования линий на экране компьютера.

В алгоритме используется управляющая переменная di, которая на каждом шаге пропорциональна разности между s и t (см. рис.1). На рисунке 1 приведен i-ый шаг, когда пиксел Pi-1 уже найден как ближайший к реальному изображаемому отрезку, и теперь требуется определить, какой из пикселов должен быть установлен следующим: Ti или Si.


Рис.1

Если s < t, то Si ближе к отрезку и необходимо выбрать его; в противном случае ближе будет Ti. Другими словами, если s -t < 0, то выбирается Si; в противном случае выбирается Ti.

Изображаемый отрезок проводится из точки (x1, y1) в точку (x2, y2). Пусть первая точка находится ближе к началу координат, тогда перенесем обе точки, T(x1, y1) так, чтобы начальная точка отрезка оказалась в начале координат, тогда конечная окажется в (Δx, Δy), где Δx = x2 - x1, Δy = y2 - y1. Уравнение прямой теперь имеет вид y = x(Δy / Δx). Из рисунка 1 следует, что

s = (Δy / Δx)(x + 1) - y,

t = y + 1 - (Δy / Δx)(x + 1)

поэтому

s - t = 2( Δy / Δx)(x + 1) - 2y - 1.

Помножим обе части равенства на Δx:

Δx(s - t) = 2(Δy•x - y•Δx) + 2Δy - Δx

так как Δx > 0, то величину Δx(s-t) можно использовать в качестве критерия для выбора пиксела. Обозначим эту величину di:

di = 2(Δy•xi-1 - yi-1•Δx) + 2Δy - Δx,

Но di надо считать на каждом шаге, рассчитаем величину Δi - приращения di

Δi = di - di-1 = 2Δy(xi - xi-1) - 2Δx(yi - yi-1).

Известно, что xi – xi-1 = 1.

Если di >= 0, то выбираем Ti, т.е. yi - yi-1 = 1 (перемещаем точку по y), а Δi считается тогда

Δi = 2(Δy - Δx).

Если di < 0, то выбираем Si, т.е. yi – yi-1 = 0 (у не меняется), тогда Δi = 2Δy.

Таким образом, мы получили итеративную формулу для вычисления критерия di.

Начальное значение d1 = 2Δy - Δx.

Procedure Line ( x1 , y1, x2, y2 : Integer);
Var dx, dy, d, d1, d2, x, y : integer;
 Begin
  dx := x2 - x1;
  dy := y2 - y1;
  d  := (dy shl 1) - dx; // shl-побитовый сдвиг влево. Здесь используется для замены *2
  d1 := dy shl 1; 
  d2 := (dy - dx) shl 1;  
  putpixel (x1, y1, white);
  y := y1;
  for x := x1 + 1 to x2 do begin
    if (d > 0) then begin
       y := y + 1;
       d := d + d2;
    end else
        d := d + d1;
    putpixel (x, y, white);
  end;
End;    

Демонстрационные примеры по теме