Колориметрия, печать и препресс: технологии Главная Форум Галерея Контакты Download Статьи
Сражаясь неустанно,
доживём мы, Санчо,
до Золотого века!
 

Форум колористов и полиграфистов

Колориметрия и печать: технологии
 
Текущее время: 10:06, Ср, 19 дек 2018

Часовой пояс: UTC+03:00


Новые
ответы
в темах:



Начать новую тему  Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
СообщениеДобавлено: 23:32, Ср, 21 ноя 2018 
Не в сети
Администратор

Зарегистрирован: 16:58, Ср, 18 авг 2004
Сообщения: 822
Откуда: Москва
Для расчетов площади и объема фигур цветового охвата написал на JavaScript функцию, которая, думаю, может кому-то пригодится.
Вот собственно функция площади любой неправильной многоугольной фигуры, на входе требует два массива координат вершин a и b, или xy по горизонтали и вертикали:
function Gamut_Area(a,b) {
	a[a.length] = a[0];
	b[b.length] = b[0];
	var A = new Array();
	var B = new Array();
	var C = new Array();
	var t = new Array();
	var S = new Array();
	var Stotal = 0.0;
	for (var i=0; i < a.length-1; i++){
		A[i] = Math.sqrt(a[i]*a[i]+b[i]*b[i]);
		B[i] = Math.sqrt(a[i+1]*a[i+1]+b[i+1]*b[i+1]);
		C[i] = Math.sqrt(Math.pow(a[i+1]-a[i],2) + Math.pow(b[i+1]-b[i],2));
		t[i] = (A[i] + B[i] + C[i]) / 2;
		S[i] = Math.sqrt(t[i] * (t[i] - A[i]) * (t[i] - B[i]) * (t[i] - C[i]));
		Stotal += S[i];
	}
	return Stotal; //площадь фигуры
}
Например мы имеем два массива координат на плоскости обычного квадрата:
xc = [1,2,2,1];
yc = [1,1,2,2];
Посчитаем площадь AreaC этого квадрата по нашей функции:
AreaC = Gamut_Area(xc,yc);
Если не хочется создавать массивы координат и вершин фигуры не так уж много, можно например так прописать эти вершины в вызове функции площади, заключив наши переменные по вертикальной и горизонтальной оси в квадратные скобки:
AreaC = Gamut_Area([1,2,2,1],[1,1,2,2]);
Объем я вычислял, суммируя срезы площадей в одних случаях, в других подходила формула объема конуса с основанием посчитанной нами фигуры, словом с объемом разберетесь. Как пример, площади срезов фигуры и объем видимых человеком цветов - HVS или Lab Gamut вычисляются здесь: https://cielab.xyz/spectralcalc/HVS_sur ... CGATS.html Для начала я просчитал конечно все координаты поверхности этой сложной 360-угольной фигуры по длине вектора C и углу поворота вектора h на каждом срезе L. Потом длину вектора и угол поворота преобразовал в координаты xy, у меня в функции они названы ab, так как я для колориметрии все это писал, по такой функции:
function LCHab2Lab(LCHab_L,LCHab_C,LCHab_H) {
	Lab_L = LCHab_L;
	Lab_a = LCHab_C * Math.cos(LCHab_H * Math.PI / 180.0);
	Lab_b = LCHab_C * Math.sin(LCHab_H * Math.PI / 180.0);
}
где LCHab_C - длина вектора, LCHab_H - угол поворота вектора (ноль справа и движение против часовой стрелки), Lab_a - координата x по горизонтали, Lab_b - координата y по вертикали. Третья координата LCHab_L в обеих случаях остается неизменной, это наши срезы фигуры с равным шагом.
Успешного программирования!


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти: 

cron
© CIELab.XYZ, научный некоммерческий образовательный проект
Создано на основе phpBB® Forum Software © phpBB Limited
Конференция запущена 18 августа 2004 года | Защищено от спама системой stopforumspam
Всего посещений - 4737636 | Всего за день - 307 | Уникальных сегодня - 58, вчера - 311, позавчера - 302