Я работаю над проблемой C ++, где я пытаюсь сделать забавную функцию полезной c (), которая принимает в качестве входных данных две начальные точки отрезков в трехмерном пространстве [(x, y, z) и радиус r] , Если сегменты можно ориентировать так, чтобы они заканчивались в одной и той же точке, функция должна вернуть значение true и распечатать эту точку. Если существует несколько ориентаций, которые создают общую конечную точку, функция должна выбрать ту, которая наиболее удалена в направлении, указанном в hint_direction.
Функция получает следующие значения:
bool func(
point3d position_0, // origin of first line segment.
float length_0, // length of first line segment.
point3d position_1, // origin of second line segment.
float length_1, // length of second line segment.
vector3d hint_direction, // in the event there are multiple solutions, return the one furthest in this direction.
point3d *out_common_end_position) // if result is true, point where both line segments can be oriented to end. otherwise uninitialized.
I работаю над одним из первых крайних случаев; где есть одна точка пересечения, такая как на изображении ниже.
(ссылка на изображение = https://i.stack.imgur.com/dh9Vr.png)
Мой код правильно идентифицирует этот крайний случай, но я не уверен, как программно найти эту точку пересечения.
//calling function with example from image above, cords, radius, and hint
bool result = func({1, 1, 0}, 1.0, {3, 1, 0}, 1.0, {0, 0, 1}, &common_end_position);
bool func(point3d position_0, float length_0, point3d position_1, float length_1,vector3d hint_direction,point3d *out_common_end_position){
//if statement detecting single intersection
if(length_0 + length_1 == d){
printf("intersection at a single point\n");
//find single intersection point (?)
}
В Интернете я следовал некоторым руководствам, в которых рассказывается, как это сделать, например: https://gamedev.stackexchange.com/questions/75756/sphere-sphere-intersection-and-circle-sphere-intersection, в которых говорится: «Если r_1 + r_2 == d, то пересечение единственная точка, расположенная на расстоянии r_1 на линии от c_1 до c_2, или: c_i = c_1 + (c_2 - c_1) * r_1 / d "
Прошло много времени с тех пор, как я сделал геометрию вот так, если я хочу найти единственную точку пересечения, как мне это сделать с помощью приведенного выше уравнения "c_i = c_1 + (c_2 - c_1) * r_1 / d"? Я понимаю, что c_2 - c_1 - это расстояние между обоими центрами, которое я вычислил ранее в своей программе как float d, но я уверен, что означает «c_1 +», поскольку c_1 относится ко всему набору шнуров (x, y , z).
В целом, я пытаюсь найти способ получить одну точку пересечения, например, такую как на моем изображении, может кто-нибудь помочь им понять связанное решение выше? Я собираюсь продолжить исследования решений в то же время. Спасибо.