Главное меню
Мы солидарны с Украиной. Узнайте здесь, как можно поддержать Украину.

Формула отношения при постоянной сумме координат

Автор RawonaM, сентября 18, 2022, 12:58

0 Пользователи и 1 гость просматривают эту тему.

RawonaM

Всю математику забыл, может кто подскажет.

Пишу скрип, генерирующий градиент из трех компонентов для 3Д-принтера. Нужно сгенерировать градиент допустим от 100-0-0 до 0-0-100. Сумма трех компонентов всегда 100. Пытаюсь понять математически.

Дано: есть две точки в трехмерном пространтсве, сумма координат всегда 100.
Нужно провести линию между ними, условие сумма координат всегда 100 сохраняется.

Какова формула? Есть тут однозначное решение или нет?

kemerover

Просто (1-t)*a+t*b.

Сумма по всем координатам (1-t)*a будет равна (1-t)*100, сумма по всем координатам t*b будет равна t*100. Соответственно, сумма по всем координатам их суммы будет равна 100.

kemerover

Вообще все допустимые точки описываются уравнением x+y+z=100, это уравнение плоскости; данная плоскость однозначно задаётся точками (100,0,0), (0,100,0) и (0,0,100). В целом любой путь по этой плоскости будут удовлетворять заданным ограничениями, но (1-t)*a+t*b это, очевидно, самый короткий путь. Но если в градиент хочется добавить третью точку, то от этого пути можно отклониться, например, с помощью каких-нибудь сплайнов; так как мы работаем по сути в плоскости с минимальными ограничениями, то тут миллионы всяких возможных решений.

RawonaM

Спасибо! Пока что формул не понял, но если это плоскость, то прямая между точками находится в этой плоскости, что уже хорошо.

Цитата: kemerover от сентября 18, 2022, 13:17Просто (1-t)*a+t*b.
Можете пояснить, что имеется в виду.

Конкретно у меня дано:
(x1, y1, z1) - начальная точка
(x2, y2, z2) - конечная точка
h - количество точек на прямой, находящиеся на равном расстоянии друг от друга.
Нужно найти функцию f(c), выдаст (xc, yc, zc), где с - номер точки на отрезке.
Т.е. для начальной и конечно точки f(0) = (x1, y1, z1), f(h-1) = (x2, y2, z2)

kemerover

a = (x1, y1, z1)
b = (x2, y2, z2)

Умножение вектора на скаляр = умножение всех компонент вектора на скаляр.
Сложение векторов = сложение соответствующих компонент векторов.

t идёт от 0 до 1. В данном случае будут использованы t = n/(h-1) для всех целых n от 0 до h-1.

RawonaM


RawonaM

Ага, значит мои изначальные интуитивные рассчеты были правильны, зря я засомневался. Я правда пришел к ним другим путем.

По формуле (1-t)*a+t*b выходит xc=(1-t)*x1+t*x2
а если попереносить, то получится x1+t(x2-x1), что я и использую на данный момент.

Спасибо!

kemerover

Цитата: RawonaM от сентября 18, 2022, 15:16Ага, значит мои изначальные интуитивные рассчеты были правильны, зря я засомневался. Я правда пришел к ним другим путем.
Спасибо!
;up:

Цитата: RawonaM от сентября 18, 2022, 15:16По формуле (1-t)*a+t*b выходит xc=(1-t)*x1+t*x2
а если попереносить, то получится x1+t(x2-x1), что я и использую на данный момент.
Да, в целом это одно и то же. Разве что есть тонкости из-за арифметики чисел с плавающей точкой, но в данном случае они не важны. Ваша формула, наверное, даже более стандартна для линейной интерполяции.

Быстрый ответ

Обратите внимание: данное сообщение не будет отображаться, пока модератор не одобрит его.

Имя:
Имейл:
Проверка:
Оставьте это поле пустым:
Наберите символы, которые изображены на картинке
Прослушать / Запросить другое изображение

Наберите символы, которые изображены на картинке:

√36:
ALT+S — отправить
ALT+P — предварительный просмотр