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

Вход на сайт

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

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

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

Я код на C++ набрал сам. Строил кривую Безье, но "прилипал" к нулю. То есть я задаю точки далеко от нуля, а он строил из нуля, а потом только обходил предложенные точки. Потом я нашёл Ваш сайт и эту статью. Оказалось, что я забыл возвести t в...
просто я не так понял, здесь мы вращаем точки куба что вращает сам куб. Мне нужно вращать просто 3д объект , данный способ не подходит
Задавайте объект в мировых координатах. Вращайте его относительно мировой системы координат. А при отрисовке преобразуйте в экранные координаты. Посмотрите пример преобразования в экранные координаты.
Это вращение по мировым осям ? Если да то как сделать по осям объекта ?
Добрый вечер! Область прорисовки остается пустой. Чего-то не хватает. Объясните плз, чего? Рамиль.

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

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

Провести прямую линию между двумя точками, заданными своими координатами. Использовать растровый алгоритм Брезенхэма.

Алгоритм основан на том, что для каждой точки растра существует ровно 4 соседних точки. Это означает, что две соседние точки могут отличаться друг от друга только по одной координате и только на 1 единицу. Т. е. для точки (x, y) соседними являются точки (x+1, y), (x-1, y), (x, y+1), (x, y-1). Точка (x+1, y+1) может оказаться закрашенной только если закрашена точка (x+1, y) или (x, y+1). Алгоритм Брезенхема модифицированный по такому закону реализован в данной программе. Так же реализована функция установки пикселя. Линии рисуются в любую сторону

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

//Создаем канвас
var canvasElem= document.createElement('canvas');
    canvasElem.id     = "canvas";
    canvasElem.width  = 600;
    canvasElem.height = 600;
    canvasElem.style.margin = 'auto';
    canvasElem.style.display = 'flex';
    document.body.appendChild(canvasElem);
    canvas = canvasElem.getContext('2d');
//для правильной работы программы необходимо чтоб переменная canvas содержала 2d context какого либо канваса
 
var plot = function(x, y) { //кисточка - ставит пиксель своего цвета
    if(isFinite(x) && isFinite(y)){
        setPixel(x,y, plot.color);
    }
};
 
function setPixel (x,y,c) { //ставит пиксель цвета с
    var p=canvas.createImageData(1,1);
    p.data[0]=c.r;
    p.data[1]=c.g;
    p.data[2]=c.b;
    p.data[3]=c.a;
    var data = canvas.getImageData(x, y, 1,1).data;
    if(data[3] <= p.data[3]) //сравниваем прозрачность
        canvas.putImageData(p,x,y);
}
 
function drawLine(x1, y1, x2, y2, color) {
    if(color)  {
        plot.color = color;
    } else {
        plot.color = {r:0,g:0,b:0,a:255}; //цвет по умолчанию - черный
    }
    var deltaX = Math.abs(x2 - x1);
    var deltaY = Math.abs(y2 - y1);
    var signX = x1 < x2 ? 1 : -1;
    var signY = y1 < y2 ? 1 : -1;
    //
    var error = deltaX - deltaY;
    //
    plot(x2, y2);
    while(x1 != x2 || y1 != y2) 
   {
        plot(x1, y1);
        var error2 = error * 2;
        //
        if(error2 > -deltaY) 
        {
            error -= deltaY;
            x1 += signX;
        }
        if(error2 < deltaX) 
        {
            error += deltaX;
            y1 += signY;
        }
    }
}

Прикрепленный файлРазмер
opryshko_index_html.zip1.17 кб