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

Вход на сайт

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

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

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

Выдаёт ошибку glut32.dll не найден! При том, что он лежит в System32! Всё решил) Нужно отправить не в System32, а в System.
Спасибо за статью. Я не Ваш студент. Но мне она помогла написать функцию для Канторова множества на Python для черепашки: import turtle def kanter(x, y, d):     if d > 1:         turtle...
Как реализовать в данном примере границы расчёта?

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

Рейтинг@Mail.ru Яндекс.Метрика
Демо JavaScript: 

ParD:
NumberOfIntervals:
Random X

var ctx = document.getElementById("paintbox").getContext('2d');
var x = [];
var y = [];
var x1=[];
var y1=[];
 
function Hermit(t){  //функция для построения многочлена
	var k;
	k=(t-x[0])/(x[1]-x[0]);
	return (1-3*k*k+2*k*k*k)*y[0]+(3*k*k-2*k*k*k)*y[1]+(x[1]-x[0])*((k-2*k*k+k*k*k)*y[2]+(-k*k+k*k*k)*y[3]);
}
 
function compareNumeric(a, b) {  //необходимо для сортировки
  if (a > b) return 1;
  if (a == b) return 0;
  if (a < b) return -1;
}
 
function start()
{
	let d=Number(document.getElementById('d').value);  //получаем значения, вводимые пользователем
	let N=Number(document.getElementById('N').value);
	rand=document.getElementById('rand').checked;  //проврека checkbox
	var i,j,t=-1,k=0,h;
	x=[];
	y=[];
	x1=[];
	y1=[];
	ctx.clearRect(0,0,1000,1000);
	ctx.strokeStyle = 'gray';
	ctx.beginPath();  //единичный квадрат
	ctx.moveTo(150,150);
	ctx.lineTo(150,550);
	ctx.lineTo(550,550);
	ctx.lineTo(550,150);
    ctx.closePath();
	ctx.stroke();
	ctx.strokeStyle = 'black';
	ctx.beginPath();  //координатные оси
	ctx.moveTo(350,0);
	ctx.lineTo(350,600);
	ctx.moveTo(0,350);
	ctx.lineTo(750,350);
	ctx.stroke();
	while (t <= 1 ) {  //вычисляем значания самой функции(изображено красной линией)
       		x1.push(t);
       		y1.push(1/(1+d*x1[k]*x1[k]));
       		t = t + 1/100;
		k++;
     	}
	for (i=0;i< y1.length;i++) y1[i]=-y1[i];
	ctx.strokeStyle='red';
	ctx.beginPath();  //рисуем функцию
    	for(let t2=0; t2<x1.length; t2++){ 
        	sx=350+200*x1[t2];
        	sy=350+200*y1[t2];
		if(t2==0) ctx.moveTo(sx, sy); else ctx.lineTo(sx, sy);
    	}
	ctx.stroke();
	ctx.strokeStyle = 'black';
	ctx.beginPath();
	h=2/N;
	if (rand==true){  //случайный массив абсцисс
		x[0]=-1;
		x[N]=1;
		for (k=1;k<N;k++) x[k]=Math.random()* (1+1) -1;
		x.sort(compareNumeric);
	}
for (i=-1;i<=1-h;i+=h){
	if (rand==false){
		x[0]=i;   
		x[1]=i+h;
		y[0]=1/(1+d*x[0]*x[0]);  //значение функции в точке
		y[1]=1/(1+d*x[1]*x[1]);
		y[2]=(-2*d*x[0])/((1+d*x[0]*x[0])*(1+d*x[0]*x[0]));  //значение производной в точке
		y[3]=(-2*d*x[1])/((1+d*x[1]*x[1])*(1+d*x[1]*x[1]));
		for (j=0;j<=3;j++) y[j]=-y[j];
		for(let t1=x[0]-3/100;t1<=x[1]+3/100;t1=t1+1/100){ //рисуем многочлен
			sx=350+200*t1;
			sy=350+200*Hermit(t1);
			if(t1==x[0]-3/100) ctx.moveTo(sx, sy); else ctx.lineTo(sx, sy);
		}
	}
		else {
			y[0]=1/(1+d*x[0]*x[0]);  //аналогичная процедура для случайных X
			y[1]=1/(1+d*x[1]*x[1]);
			y[2]=(-2*d*x[0])/((1+d*x[0]*x[0])*(1+d*x[0]*x[0]));
			y[3]=(-2*d*x[1])/((1+d*x[1]*x[1])*(1+d*x[1]*x[1]));
			for (j=0;j<=3;j++) y[j]=-y[j];
			for(let t1=x[0]-3/100;t1<=x[1]+3/100;t1=t1+1/100){
				sx=350+200*t1;
				sy=350+200*Hermit(t1);
				if(t1==x[0]-3/100) ctx.moveTo(sx, sy); else ctx.lineTo(sx, sy);
			}
		}
		ctx.stroke();  //рисуем точки
		ctx.beginPath();
		ctx.arc(350+200*x[1],350+200*y[1],3,0,2*Math.PI);
		ctx.stroke();
		ctx.fillStyle='green';
		ctx.fill();
		ctx.beginPath();
		ctx.arc(350+200*x[0],350+200*y[0],3,0,2*Math.PI);
		ctx.stroke();
		ctx.fillStyle='green';
		ctx.fill();
		x.splice(0,1);
	}
}