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

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

Построения
на плоскости (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
Статья по теме: 

Любые два многоугольника с одинаковой площадью равносоставлены. Это значит, что разрезав на части одни многоугольник, из этих частей можно составить другой.

Данный код представляет визуализацию теоремы Бояйи-Гервина, то есть получение из одного многоугольника другого. А именно: из четырёхугольника треугольник.

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

<script> 
 
		var drawingCanvas = document.getElementById('image');
		var a = drawingCanvas.getContext('2d');
 
		//Вершина
		var d = {
			x: 0,
			y: 0
		}
 
		var A = Object.assign({}, d);
		var B = Object.assign({}, d);
		var C = Object.assign({}, d);
		var D = Object.assign({}, d);
		var K = Object.assign({}, d);
		var L = Object.assign({}, d);
		var M = Object.assign({}, d);
		var N = Object.assign({}, d);
		var O = Object.assign({}, d);
 
		var width = 500, height = 500;
		var angle = 3*Math.PI/2;
 
		//Определение точек 
		function setData()
		{
			A.x = 500;
			A.y = 550;
			B.x = A.x + width;
			B.y = A.y;
			C.x = B.x;
			C.y = A.y + height;
			D.x = A.x;
			D.y = C.y;
			K.x = (width/2) + 50 + A.x;
			K.y = A.y;
			L.x = (width/2) - 50 + A.x;
			L.y = D.y;
			M.x = A.x;
			M.y = height/2 + A.y;
			N.x = B.x;
			N.y = M.y;
			O.x = (L.x + N.x)/2;
			O.y = (L.y + N.y)/2;
		}
 
		function first()
		{
			a.fillStyle = "gold";
			a.beginPath();
			a.moveTo(A.x, A.y);
			a.lineTo(K.x, K.y);
			a.lineTo(O2.x, O2.y);
			a.lineTo(M1.x, M1.y);
			a.fill();
		}
 
		function second()
		{
			a.fillStyle = "firebrick";
			a.beginPath();
			a.moveTo(K.x, K.y);
			a.lineTo(B.x, B.y);
			a.lineTo(N.x, N.y);
			a.lineTo(O1.x, O1.y);
			a.fill();
		}
 
		function third()
		{
			a.fillStyle = "springgreen";
			a.beginPath();
			a.moveTo(N.x, N.y);
			a.lineTo(C.x, C.y);
			a.lineTo(L.x, L.y);
			a.fill();			
		}
 
		function fourth()
		{
			a.fillStyle = "slateblue";
			a.beginPath();
			a.moveTo(M.x, M.y);
			a.lineTo(O.x, O.y);
			a.lineTo(L1.x, L1.y);
			a.lineTo(D.x, D.y);
			a.fill();
		}	
 
		//Пересчёт координаты x при повороте
		function rotate_X(x, y, a, x0, y0)
		{
			return (x-x0)*Math.cos(a) - (y-y0)*Math.sin(a) + x0;
		}
 
		//Пересчёт координаты y при повороте
		function rotate_Y(x, y, a, x0, y0)
		{
			return (x-x0)*Math.sin(a) + (y-y0)*Math.cos(a) + y0;
		}
 
		//Первая анимация перестроения
		function animation1()
		{
 
			if(angle < 5*Math.PI/2)
			{
				clear();
				clearInterval(t);
 
				angle+=0.001;
				tmp = C.x;
				C.x = (rotate_X(C.x, C.y, -0.001, N.x, N.y));
				C.y = (rotate_Y(tmp, C.y, -0.001, N.x, N.y));
 
				tmp = L.x;
				L.x = (rotate_X(L.x, L.y, -0.001, N.x, N.y));
				L.y = (rotate_Y(tmp, L.y, -0.001, N.x, N.y));
 
				tmp = O.x;
				O.x = (rotate_X(O.x, O.y, 0.001, M.x, M.y));
				O.y = (rotate_Y(tmp, O.y, 0.001, M.x, M.y));
 
				tmp = L1.x;
				L1.x = (rotate_X(L1.x, L1.y, 0.001, M.x, M.y));
				L1.y = (rotate_Y(tmp, L1.y, 0.001, M.x, M.y));				
 
				tmp = D.x;
				D.x = (rotate_X(D.x, D.y, 0.001, M.x, M.y));
				D.y = (rotate_Y(tmp, D.y, 0.001, M.x, M.y));					
 
				first();
				second();
				third();
				fourth();
				t = setInterval(animation1, 5);
			}
			else
			{
				clearInterval(t);
				angle = 0;
				animation2();
			}			
		}
 
		//Вторая анимация перестроения
		function animation2()
		{
			if(angle < Math.PI)
			{
				clear();
				clearInterval(k);
 
				angle+=0.001;
				tmp = B.x;
				B.x = (rotate_X(B.x, B.y, -0.001, K.x, K.y));
				B.y = (rotate_Y(tmp, B.y, -0.001, K.x, K.y));
 
				tmp = C.x;
				C.x = (rotate_X(C.x, C.y, -0.001, K.x, K.y));
				C.y = (rotate_Y(tmp, C.y, -0.001, K.x, K.y));
 
				tmp = L.x;
				L.x = (rotate_X(L.x, L.y, -0.001, K.x, K.y));
				L.y = (rotate_Y(tmp, L.y, -0.001, K.x, K.y));
 
				tmp = N.x;
				N.x = (rotate_X(N.x, N.y, -0.001, K.x, K.y));
				N.y = (rotate_Y(tmp, N.y, -0.001, K.x, K.y));				
 
				tmp = O1.x;
				O1.x = (rotate_X(O1.x, O1.y, -0.001, K.x, K.y));
				O1.y = (rotate_Y(tmp, O1.y, -0.001, K.x, K.y));					
 
				first();
				second();
				third();
				fourth();
				k = setInterval(animation2, 5);
			}
			else clearInterval(k);
		}
 
		//Очистка области рисования
		function clear()
		{
			a.fillStyle = "black";
			a.fillRect(0, 0, 1500, 1500);			
		}
 
		//Подложка
		function rect()
		{
			a.fillStyle = "white";
			a.fillRect(500, 550, 500, 500);
		}
 
		//Разбиение четырёхугольника
		function start()
		{
			first();
			second();
			third();
			fourth();			
		}
 
		//Перегруппировка
		function group()
		{
			t = setInterval(animation1, 200);
		}
 
		setData();		
		var O1 = Object.assign({}, O);
		var O2 = Object.assign({}, O);
		var L1 = Object.assign({}, L);
		var M1 = Object.assign({}, M);
		var t;
		var k;
 
		rect();
 
 
 
  </script>

Прикрепленный файлРазмер
Ivancha_Theorem.rar387.61 кб