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

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

Построения
на плоскости (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 Яндекс.Метрика
Демо JavaScript: 

Для интерполяции заданной функции необходимо выбрать узлы, через которые будет проходить многочлен Нютона. Необходимо выбрать минимум 3 точки, нажав на левую кнопку мыши (не обязательно нажимать на сам график функции), и нажать кнопку "Старт".

var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
var imageData;
let x = new Array(canvas.width);
let fx = new Array(canvas.height);
// Массив, через точки которого будет построен ногочлен Ньютона
let xMouse = [];
// Сдвиг координат
let offset = 300;
 
// Получить (x,y) кордианты курсора, в момент нажатия
function getCursorPosition(canvas, event) {
    const rect = canvas.getBoundingClientRect();
    let tmp = (event.clientX - rect.left) | 0;
    xMouse.push(tmp);
}
 
// Интерполируем функцию по заданным точкам
function Newton() {
    let yMouse = [];
    let n = xMouse.length;
    if (n <= 2) {
        alert("Недостаточно узлов интерполяции");
        return;
    }
    // Точки, через которые должен пройти многочлен
    for (let i = 0; i < n; i++) {
        yMouse[i] = fx[xMouse[i]];
    }
    for (let i = 0; i < n; i++) {
        ctx.fillStyle = "purple";
        ctx.fillRect(xMouse[i] - 4, yMouse[i] - 4, 8, 8);
    }
 
    // Массив для раздленымх разностей
    let fi = new Array(n);
    for (let i = 0; i < n; i++) {
        fi[i] = new Array(n).fill(0);
    }
    // Находим разделеные разности
    let k = 0;
    for (let a = 0; a < n; a++) {
        for (let b = 0; b < n; b++) {
            fi[a].shift();
        }
    }
    for (let j = 0; j < n; j++) {
        for (let i = 0; i < n - j; i++) {
            if (j == 0) {
                fi[i].push(yMouse[i]);
            } else {
                fi[i].push((fi[i + 1][j - 1] - fi[i][j - 1]) / (xMouse[i + k] - xMouse[i]));
            }
        }
        k++;
    }
    // Строим полином Ньютона
    let P = [];
    for (let k = 0; k < canvas.width; k++) {
        let Pi = [];
        for (let i = 0; i < n; i++) {
            if (i == 0) {
                Pi.push(fi[0][0]);
            } else {
                let tmp = 1;
                for (let j = 0; j < i; j++) {
                    tmp = tmp * (x[k] + offset - xMouse[j]);
                }
                Pi.push(tmp * fi[0][i]);
            }
        }
        let tmp = 0;
        for (let q = 0; q < n; q++) {
            tmp += Pi[q];
        }
        P.push(tmp);
 
    }
    // Рисуем полином
    ctx.beginPath();
    ctx.lineWidth = 3
    ctx.strokeStyle = "red";
    for (let i = 0; i < canvas.width; i++) {
        if (i == 0) {
            ctx.moveTo(i, P[i]);
        }
        ctx.lineTo(i, P[i]);
    }
    ctx.stroke();
    ctx.closePath();
}
 
function start() {
    // Красим канвас
    ctx.fillStyle = "#ccc";
    ctx.fillRect(0, 0, 600, 600);
    // Рисуем Координатную плоскость
    ctx.beginPath();
    ctx.moveTo(300, 0);
    ctx.lineTo(300, 600);
    ctx.moveTo(0, 300);
    ctx.lineTo(600, 300);
    ctx.stroke();
    ctx.closePath();
    ctx.beginPath();
    // Рисуем функцию
    ctx.lineWidth = 3;
    for (let i = 0; i < canvas.width; i += 1) {
        x[i] = i - offset;
        fx[i] = -Math.abs(x[i] * x[i] / 60 + 2 * x[i] - 70) + offset;
        if (i == 0) {
            ctx.moveTo(x[i] + offset, fx[i]);
        }
        ctx.lineTo(x[i] + offset, fx[i]);
    }
    ctx.stroke();
    ctx.closePath();
    // Клик мыши
    canvas.addEventListener('mousedown', function (e) {
        getCursorPosition(canvas, e)
 
    })
}
 
start();