Не буду сейчас допытывать Вас вопросами типа:
1. каким образом, от угла на колорпикере зависят координаты точек (x1, y1) (x2, y2)?
2. почему в формулах для получения координат вы умножаете синусы и косинусы угла на * 50
3. и так далее.
Просто дам общую информацию по преобразованиям из полярных координат в декартовы:
преобразование декартовых координат в полярные
есть некая точка, заданная координатами x,y в декартовой системе координат. для вычисления ее полярных координат используем формулы
// угол между осью X и отрезком, заданным координатами (0,0)-(x,y)
var angle = Math.atan2(x,y); // в радианах
var angle = 180*Math.atan2(x,y)/Math.PI; // в градусах
// длинна отрезка (сежду точкми 0,0 и x,y)
var radius = Math.sqrt( Math.pow(x, 2) + Math.pow(y, 2) );
преобразование полярных координат в декартовы
есть некая точка, заданная координатами angle, radius в полярной системе координат. для вычисления ее декартовых координат используем формулы
// угол angle задан в радианах
var x = radius*Math.cos(angle);
var y = radius*Math.sin(angle);
векторные преобразования (самая малость)
вариант 1. есть некий отрезок (вектор) заданный декартовыми координатами точек (начала и конца) x1,y1 и x2,y2 соответственно.
// угол между осью X и отрезком, заданным координатами (x1,y1)-(x2,y2), он же направление вектора.
var angle = Math.atan2(x2-x1,y2-y1); // в радианах
var angle = 180*Math.atan2(x2-x1,y2-y1)/Math.PI; // в градусах
// длинна отрезка, заданного координатами (x1,y1)-(x2,y2), он же длина (размер) вектора
var radius = Math.sqrt( Math.pow(x2-x1, 2) + Math.pow(y2-y1, 2) );
вариант 2. есть некий отрезок (вектор) заданный декартовыми координатами точки (начала) x1,y1 и полярными координатами точки конца - angle и radius, указывающими направление отрезка и его длинну, относительно точки начала x1,y1.
// находим декартовы координаты точки конца. угол angle задан в радианах
var x2 = x1+radius*Math.cos(angle);
var y2 = y1+radius*Math.sin(angle);
thehighhomie, честно говоря не знаю зачем оно может понадобится при решении Вашей задачи, так как мне до конца не ясно что вы пытаетесь сделать. Данная формула является одним из звеньев преобразования декартовых координат в полярные, так же она используется для расчета длинны вектора, заданного координатами точек в декартовом пространстве.
В любом случае не торопитесь применять формулы, возможно расчет необходимо производить по другому. Напишите пожалуйста, что обозначают точки x1,y1 и x2,y2 и угол anglePI
Moskus, написал как комментарий к Вашему ответу по причине того, что он (Ваш ответ) близок к исчерпывающему, и еще один ответ тут просто не уместен. Также, мой комментарий не является ответом из-за своей неполноты, а является лишь демонстрацией еще одного подхода к решению части общей задачи.
По поводу HSB/HSV вы конечно правы, именно поэтому и было сказано что способ "самый простой" но и не говорилось что это "хорошее решение" )
сравнивать цвета проще всего вычисляя расстояние между цветами.
каждую составляющую считаем координатами на одной из координатных осей 3-х мерного пространства, например r - ось x, g - ось y, b - ось z.
Таким образом расстояние между 2-я цветами можно рассчитать по формуле:
l = sqrt( pow(r1-r2, 2) + pow(g1-q2, 2) + pow(b1-b2, 2) )
где:
r1, g1, b1 это значения красной, зеленой и синей компоненты первого цвета
r2, g2, b2 это значения красной, зеленой и синей компоненты второго цвета
чем больше будет расстояние l между 2я цветами, тем они менее похожи друг на друга.
Alex Gutter, вы напишите Ваше мнение, почему при Х=9, Y=5, правильный ответ 1,0 а не 0,1. Сам я что то не догоняю, и единственное что приходит на ум, это то что жуки более приоритетны чем края при выборе места, но это уже мои домыслы))))
с 94 года, сейчас уже давно пенсионер и занимаюсь этим как хобби. Причина - стал замечать что подтупливаю иногда (как пример - ваше задание, не увидел сразу косячка).
Alex Gutter, есть проблема, не могу понять почему должно получится 1,0, если делаю вручную (с учетом того что правая часть больше) то должно получатся 0,1.
Захар Шайков, если допускается что данные могут быть больше чем их хэш то условие Невозможность найти два разных сообщения с одинаковыми хеш-значениями. в принципе не может быть выполнено.
polikarpovst, при такой постановке задачи авторитетно уиверждаю что ни среднее арифметическое, ни среднее взвешенное найти невозможно, если не оговариватт отдельно дополнительные ограничения и принимаемые условности. Конкретно в вашем случае могу предлодить считать не среднее а суммарный вектор в 2х мерном просранстве. Но я не зная доя чего это вообще вам надо не могу гарантировать что суммарный вектор вам подойдет
polikarpovst, про 6, 13, 20 я не спрашивал среднее значение между парами, нужно среднее значение между всеми 3я цифрами за раз. Сами цифры подобраны таким образом, что если перевести их в углы то это будет 0, 120 и 240 градусов.
Опишите как по вашей логике посчитать среднее между этими 3я углами? (По моей логике сделать это невозможно, и среднее этих углов равно неопределенности)
polikarpovst, я так понимаю, что вы сами не представляете, как считать среднее значение не для пары цифр а например доя трех или более цифр. Спрошу подругому, для чего это нужно? Опишите, что вы хотите делать с этими цифрами на выходе?
Не буду сейчас допытывать Вас вопросами типа:
1. каким образом, от угла на колорпикере зависят координаты точек (x1, y1) (x2, y2)?
2. почему в формулах для получения координат вы умножаете синусы и косинусы угла на * 50
3. и так далее.
Просто дам общую информацию по преобразованиям из полярных координат в декартовы:
преобразование декартовых координат в полярные
есть некая точка, заданная координатами x,y в декартовой системе координат. для вычисления ее полярных координат используем формулы
преобразование полярных координат в декартовы
есть некая точка, заданная координатами angle, radius в полярной системе координат. для вычисления ее декартовых координат используем формулы
векторные преобразования (самая малость)
вариант 1. есть некий отрезок (вектор) заданный декартовыми координатами точек (начала и конца) x1,y1 и x2,y2 соответственно.
вариант 2. есть некий отрезок (вектор) заданный декартовыми координатами точки (начала) x1,y1 и полярными координатами точки конца - angle и radius, указывающими направление отрезка и его длинну, относительно точки начала x1,y1.