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

Вход на сайт

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

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

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

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

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

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

масштаб
сдвиг по x
сдвиг по y
наклон

// x = (1 + cos(t)) * cos(t)
// y = (1 + cos(t)) * sin(t)
// t принадлежит промежутку [0; 2п]
 
var t, x, y, nX, nY, oldX, oldqY;
let scl, DX, DY, Rotate;
var canvas = document.getElementById('cvs');
var ctx = canvas.getContext('2d');
 
// отрисовка графика
function Init() {
 
	scl = Number(document.getElementById('scale').value); // масштаб
	DX = Number(document.getElementById('shiftX').value); // сдвиг по х
	DY = Number(document.getElementById('shiftY').value); // сдвиг по у
	Rotate = Number(document.getElementById('rotate').value); // наклон
	Rotate = (Math.PI / 180) * Rotate;
 
	ctx.clearRect(0, 0, 500, 500);
 
	nX = (1 + Math.cos(0)) * Math.cos(0) * scl;
	nY = (1 + Math.cos(0)) * Math.sin(0) * scl;
 
	// получение координат
	oldX = nX * Math.cos(Rotate) - nY * Math.sin(Rotate);
	oldY = nX * Math.sin(Rotate) + nY * Math.cos(Rotate);
 
 	// отрисовка
	for(t = 0; t < 10 * Math.PI; t += 0.01){
 
		// вычисление начальных координат точек х и у
		nX = (1 + Math.cos(t)) * Math.cos(t) * scl;
		nY = (1 + Math.cos(t)) * Math.sin(t) * scl;
 
		// вычисление текущих координат с учётом поворота
		x = nX * Math.cos(Rotate) - nY * Math.sin(Rotate);
		y = nX * Math.sin(Rotate) + nY * Math.cos(Rotate);
 
		ctx.beginPath();
		ctx.moveTo(oldX + DX, oldY + DY);
		ctx.lineTo(x + DX, y + DY);
		ctx.stroke();
 
		oldX = x; oldY = y;
	}
}
 
// выравнивание графика
function Start() {
 
	// получение координат и заполнение по ним
	var tmpX = (1 + Math.cos(0)) * Math.cos(0);
	var minX = tmpX, maxX = tmpX;
 
	var tmpY = (1 + Math.cos(0)) * Math.sin(0);
	var minY = tmpY, maxY = tmpY;
 
	for(t = 0; t < 10 * Math.PI; t += 0.01){
		y = (1 + Math.cos(t)) * Math.cos(t);
		x = (1 + Math.cos(t)) * Math.sin(t);
 
 		// сохранение значений координат
		if(x > maxX) {
			maxX = x;
		}
 
		if(x < minX) {
			minX = x;
		}
 
		if(y > maxY) {
			maxY = y;
		}
 
		if(y < minY) {
			minY = y;
		}
	}
 
	// подгоняет под размер экрана
	tmpX = 500 / (maxX - minX);
	tmpY = 500 / (maxY - minY);
 
	if(tmpX < tmpY) {
		scl = tmpX;
	} else {
		scl = tmpY;
	}
 
	DX = 250;
	DY = 250;
	Rotate = 0;
 
 	// передача новых значений
	document.getElementById("scale").value = scl;
	document.getElementById("shiftX").value = DX;
	document.getElementById("shiftY").value = DY;
	document.getElementById("rotate").value = Rotate;
 
	ctx.clearRect(0, 0, 500, 500);
 
 	// получение координат
	oldX = (1 + Math.cos(0)) * Math.cos(0) * scl;
	oldY = (1 + Math.cos(0)) * Math.sin(0) * scl;
 
	for(t = 0; t < 10 * Math.PI; t += 0.01){
 
		// вычисление координат для графика
		x = (1 + Math.cos(t)) * Math.cos(t) * scl;
		y = (1 + Math.cos(t)) * Math.sin(t) * scl;
 
		ctx.beginPath();
		ctx.moveTo(oldX + DX, oldY + DY);
		ctx.lineTo(x + DX, y + DY);
		ctx.stroke();
 
		oldX = x;
		oldY = y;
	}
}

Прикрепленный файлРазмер
2. Построение параметрических графиков функций с масштабированием и поворотом.zip5.53 кб