Форум программистов, компьютерный форум, киберфорум
Математика
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
5 / 5 / 0
Регистрация: 10.10.2014
Сообщений: 86
1

Как получить коэффициенты в обратной зависимости зависимости от удаления от точки

05.02.2019, 18:27. Просмотров 1600. Ответов 5
Метки нет (Все метки)

Здравствуйте.

Есть некая точка p(px, py, pz). Она лежит на треугольнике (в т.ч. может лежать в одном из его узлов) с вершинами v1, v2, v3
Нужно получить 3 коэффицинта, сумма которых дает единицу (в дальнейшем по коэффициентам интерполируется цвет этой точки по цветам вершин треугольника), при чем чем ближе точка к одной из вершин, тем больше должен быть соответствующий коэффициент (если точка лежит на узле, то кофф.для этого узла должен быть 1, для остальных - 0)
Как я делаю сейчас:

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
float v1_len = (p - v1).len2f();//строим 3 вектора по вершине и точке и берем их модули 
float v2_len = (p - v2).len2f();
float v3_len = (p - v3).len2f();
float total_len = v1_len + v2_len + v3_len;//сумма модулей векторов
 
float v1_ratio;
float v2_ratio;
float v3_ratio;
if (total_len > 0)//проверка на вырожденность
{
 
        /*v1_ratio = v1_len / total_len; //сначала делал так, но тут получается прямая зависимость дальше=>больше, нужно наоборот
    v2_ratio = v2_len / total_len;
    v3_ratio = v3_len / total_len;*/
 
    v1_ratio = 1 - v1_len / total_len;
    v2_ratio = 1 - v2_len / total_len;
    v3_ratio = 1 - v3_len / total_len;
 
    total_len = v1_ratio + v2_ratio + v3_ratio;
 
    v1_ratio /= total_len;
    v2_ratio /= total_len;
    v3_ratio /= total_len;      
}
else
    v1_ratio = v2_ratio = v3_ratio = 1.f / 3.f;
В принципе это даже считается, но меня не покидает ощущение, что все делается намного проще и правильней, просто я затупил в элементарном вопросе.
Подскажите, как можно сделать меньшим количеством действий?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.02.2019, 18:27
Ответы с готовыми решениями:

Оценить коэффициенты температурной зависимости (метод наименьших квадратов)
Товарищи форумчане, помогите решить задачу. Используя метод наименьших квадратов оценить...

3Д-графика в Маткаде. Искажение окружности на сфере в зависимости от параметра. Коэффициенты Ламе
Доброго всем времени суток!!!!!!! Возможно данная тема давно пылится в архивах форума, но я рискну...

Зависимости радиус – вектора точки от времени
Скорость материальной точки, движущейся в плоскости, изменяется по закону V=A*i-2*B*t*j ...

Изменение цвета точки в зависимости от значения температуры
Всем привет. У меня следующий вопрос. Есть следующие исходные данные: координаты точки и...

5
Модератор
Эксперт по математике/физике
6129 / 3892 / 1440
Регистрация: 09.10.2009
Сообщений: 7,315
Записей в блоге: 4
05.02.2019, 23:47 2
Ваша точка лежит на треугольнике (только на контуре) или внутри треугольника?
Я делал, если внутри, в том числе на сторонах или в вершине.
Если бы вы чуть пописали, прежде чем кодить... У вас есть расстояния от точки (внутри) до вершин V1,V2,V3 R1,R2 и R3 соответственно. Тогда ваши коэффициенты равны, судя по коду,
https://www.cyberforum.ru/cgi-bin/latex.cgi?k_1=\frac{1}{2}\left(1-\frac{R_1}{R_1+R_2+R_3} \right)\\k_2=\frac{1}{2}\left(1-\frac{R_2}{R_1+R_2+R_3} \right)\\k_3=\frac{1}{2}\left(1-\frac{R_3}{R_1+R_2+R_3} \right)
Кстати, в строке 20 эта сумма равна 2, можно было специально не вычислять.
Казалось бы, сумма https://www.cyberforum.ru/cgi-bin/latex.cgi?k_1+k_2+k_3=1. НО, если точка лежит в узле V1, то R1=0, и тогда k1=1/2, а не 1, как вам хотелось. И другие коэффициенты не по нулю, а зависят от длин сторон треугольника:
https://www.cyberforum.ru/cgi-bin/latex.cgi?k_1=\frac{1}{2}\\k_2=\frac{R_3}{2\left(R_2+R_3 \right)}=\frac{b}{2\left(b+c \right)}\\k_3=\frac{R_2}{2\left(R_2+R_3 \right)}=\frac{c}{2\left(b+c \right)}
Это явно не то, что вы хотели.
А если точка лежит на отрезке V2V3, то коэффициент от точки V1 должен быть равен 0, что означает R2+R3=0, чего быть никогда не может, так как узлы V2 и V3 не совпадают, а значит, от любой точки до них сумма расстояний никогда не 0; она будет минимальной на отрезке V2V3 и равна стороне a треугольника.
Я бы предложил другой способ.
1
5 / 5 / 0
Регистрация: 10.10.2014
Сообщений: 86
06.02.2019, 10:35  [ТС] 3
jogano,
Спасибо за развернутый ответ!
Цитата Сообщение от jogano Посмотреть сообщение
Кстати, в строке 20 эта сумма равна 2, можно было специально не вычислять.
Верно, спасибо, не подумал об этом.
Цитата Сообщение от jogano Посмотреть сообщение
если точка лежит в узле
Пока есть вариант обойти это. В кечестве входных данных могу получить конкретную существующую точку, куда легла моя p (в целом я ищу ближаюшую точку на поверхности, представленной набором треугольников и треугольник, на котором она лежит). Если они совпадают - то не интерполировать цвет, а брать из существующей точки. Если не совпадают, значит интерполировать по вершинам треугольника.
Цитата Сообщение от jogano Посмотреть сообщение
А если точка лежит на отрезке V2V3, то коэффициент от точки V1 должен быть равен 0
Вот этого не понял - почему он должен быть равным 0?
Цитата Сообщение от jogano Посмотреть сообщение
Я бы предложил другой способ.
В смысле попытаться придумать другой подход, или вы знаете конкретный способ?
0
Эксперт по математике/физике
4513 / 3610 / 1659
Регистрация: 14.01.2014
Сообщений: 7,789
06.02.2019, 10:47 4
Лучший ответ Сообщение было отмечено 4elovek37 как решение

Решение

Погуглите по теме: барицентрические координаты.
1
Эксперт C
24143 / 14854 / 3133
Регистрация: 24.12.2010
Сообщений: 31,787
06.02.2019, 10:52 5
4elovek37, конкретно ваша задача мне неизвестна. Но возможно, вас заинтересует этот топик.
Как получить комплементарный (контрастный) цвет, зная координаты точки на окружности
1
5 / 5 / 0
Регистрация: 10.10.2014
Сообщений: 86
06.02.2019, 12:52  [ТС] 6
mathidiot,
Погуглил, и, кажется, это в самый раз!
Выходит как-то так:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
struct barycentric_coord
    {
        float v;
        float u;
        float w;
    };
 
    barycentric_coord calculate_barycentric(const p3& i_pt, const p3& i_v1, const p3& i_v2, const p3& i_v3)
    {
        
        const p3 v1 = i_v2 - i_v1, v2 = i_v3 - i_v1, v3 = i_pt - i_v1;
 
        float d00 = v1 * v1;
        float d01 = v1 * v2;
        float d11 = v2 * v2;
        float d20 = v3 * v1;
        float d21 = v3 * v2;
        float denom = d00 * d11 - d01 * d01;
 
        barycentric_coord res;
        res.v = (d11 * d20 - d01 * d21) / denom;
        res.w = (d00 * d21 - d01 * d20) / denom;
        res.u = 1.0f - res.v - res.w;
 
        return res;
    }

Сейчас потестирую на разных случаях, но похоже что решение найдено
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.02.2019, 12:52

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Графики зависимости полной W и потенциальной Wn энергии материальной точки
Помогите решить: 5.1 приведены графики зависимости полной W и потенциальной Wn энергии...

Распределение координат точки относительно нуля в зависимости от числа точек и расст
Здравствуйте Что-то не получается решить простенькую задачку. Задача: дано расстояние между...

Не удается получить значение свойства зависимости?
Есть класс - описывающий свойство зависимости namespace WpfApp1 { class BrushClass:...

Заполнение данных в зависимости от выбора пункта и суммирование в зависимости от выбора
Всем уважаемым участникам форума доброго времени суток! Помогите пожалуйста разобраться с задачей....

Построить график зависимости расстояния от водной поверхности до верхней точки плавающего на воде тела
Помогите,пожалуйста ) Построить график зависимости расстояния от водной поверхности до верхней...

Получить символ с клавиатуры в зависимости от текущей раскладки
Всем привет. Возник вопрос, как получить символ с клавиатуры (текущей раскладки) ? Вот всё что у...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.