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

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

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

<html>
	<head>
 
	</head>
	<body>
		<canvas id="canvas" width="500" height="500" style="border: 1px solid black" onclick="storeGuess(event)"></canvas>
		<script>
			let ctx = document.getElementById('canvas').getContext('2d')
			// отрисовка фона
			ctx.beginPath ()
			ctx.fillStyle = "blue"
			ctx.fillRect (0, 0, 500, 500)
			ctx.fillStyle = "green"
			ctx.fillRect (0, 300, 500, 500)
			ctx.stroke()
 
			let score = 0; // переменная, хранящая количество попаданий мышью по "ракете"
 
			// функция проверки попадения точки с координатами (х, у) в многоугольник, координаты которого находятся в массивах рХ[], рУ[]
			function PIP(x, y) {
				let parity = 0; // флаг четности
				for (let i = 1; i < pX.length; i ++) { // цикл, перебирающий все ребра многоугольника
					if (pY[i] - pY[i - 1] == 0) continue; // проверка горизонтальности ребра
					if (Math.max (pX[i], pX[i - 1]) > x) { // проверка расположения ребра многоугольника  (правее ли оно точки (х, у))
						if (Math.max (pY[i], pY[i - 1]) != y) { // проверка непопадания сканируещего луча на нижний конец ребра многоугольника 
							if (y - Math.max (pY[i], pY[i - 1]) < 0 && y - Math.min (pY[i], pY[i - 1]) >= 0) // проверка пересечения лучом ребра многоугольника
								parity = 1 - parity;
						}
					}
				}
				return parity
			}
 
 
			// функция обработки нажатия на холст
			function storeGuess(event) { 
				let coordX = event.offsetX, 
				    coordY = event.offsetY
				if (PIP(coordX, coordY)) score ++; // добавление очков, если нажатие попадает внутрь многоугольника
				console.log ("coord x: " + coordX + " coord y: " + coordY, PIP(coordX, coordY))
			}
 
 
			let x, y;
			x = -220;
			y = 220; // задание точек, относительно которых будем отрисовывать двигающиеся элементы
 
			let imgData = ctx.getImageData (0, 0, 500, 500);
 
 
			let pX = [],
			    pY = []; // массивы, хранящие координаты вершин многоугольника
 
 
			// функция отрисовки
			function draw()
			{
				ctx.putImageData (imgData, 0, 0);
				ctx.beginPath();
				// количество нажатий на ракету
				ctx.font = "20px Georgia";
				ctx.fillText ("Попадания ", 320, 25);
				ctx.fillText (score, 460, 25);
 
				ctx.fillStyle = "yellow";
				ctx.moveTo(x - 50, y + 30)
				ctx.lineTo(x - 100, y + 70)
				ctx.lineTo(x - 50, y + 50)
				ctx.fill()
 
 
 
				ctx.fillStyle = "red";
				ctx.moveTo(x - 50, y + 20)
				ctx.lineTo(x - 50, y + 50)
				ctx.lineTo(x - 80, y)
				ctx.fill()
 
				ctx.fillStyle = "red";
				ctx.strokeStyle = "black";
 
				ctx.fillRect (x, y, 200, 80);
				ctx.strokeRect (x, y, 200, 80);
 
				ctx.beginPath();
				ctx.moveTo(x, y + 10)
				ctx.lineTo(x - 50, y + 20)
				ctx.lineTo(x - 50, y + 50)
				ctx.lineTo(x, y + 70)
 
				ctx.moveTo(x + 200, y - 10)
				ctx.lineTo(x + 300, y + 40)
				ctx.lineTo(x + 200, y + 90)
				ctx.fillStyle = "grey"
				ctx.fill()
					// забивка массивов координат вершин многоугольника (координаты "хитбокса")
 
 
					pX[0] = x
					pY[0] = y
 
					pX[1] = x + 125
					pY[1] = y
					pX[2] = x + 125
					pY[2] = y - 35
					pX[3] = x + 205
					pY[3] = y - 35
					pX[4] = x + 205
					pY[4] = y + 45
					pX[5] = x + 150
					pY[5] = y + 45
					pX[6] = x + 150
					pY[6] = y + 100
				ctx.stroke();
 
				// смена направления движения
				if (x == -220) key = 1;
				if (x == 600) key = -1;
				x += key * 5;
 
			}
 
 
			setInterval(draw, 15); // создаем анимацию
 
 
		</script>
	</body>
</html>

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