2013-09-19 2 views
1

Я хочу рассчитать две точки треугольника 3D, которые имеют заданную координату Z. Я предполагаю, что способ сделать это будет каким-то образом создать плоскость, которая совершенно плоская с моей заданной координатой Z, а затем вычислить, где треугольник пересекается с ней (или это неправильно).Вычислить две точки треугольника с заданными значениями Z

Если вы знаете, как это сделать, пожалуйста, помогите. Я искал, но на самом деле не нашел ничего похожего на работу.

+1

Какой код вы пробовали? И как вы можете найти треугольник, зная только одну точку? Я, должно быть, неправильно понимаю вас, но нет возможности рассчитать треугольник с одним (или даже двумя) точками, а не с другой информацией. – davidsbro

+0

Я с davidsbro здесь, пожалуйста, добавьте больше информации, я не уверен, о чем вы говорите. – Codecat

+0

У меня 3 точки, но я хочу две точки сторон треугольника, которые имеют заданную координату z. – Gerharddc

ответ

0

Предполагая, что ваш треугольник определяется тремя точками, где T0 находится слева, T1 является базовым справа, а T2 - кончиком. И много других предположений о том, как треугольник выровнена и т.д.:

public bool GetIntersect(Vector3 T0, Vector3 T1, Vector3 T2, float Z, out Vector3 P0, out Vector3 P1) 
{ 
    if (!((Z <= T2.Z) && (Z >= T0.Z) && (Z >= T1.Z))) 
     return false; 

    var left = T2 - T0; 
    left *= 1f/left.Z; 

    var right = T2 - T1; 
    right * 1f/right.Z; 

    P0 = T0 + (left * (Z - T0.Z)); 
    P1 = T1 + (right * (Z - T1.Z)); 

    return true; 
} 

P.S; Недостаток в именах параметров плох! не делай этого! Я просто не хочу исправлять свою ошибку прямо сейчас: P

+0

Извините, это не работает на сложных моделях. Не могли бы вы подробнее остановиться на ориентации, которую должны иметь треугольники? – Gerharddc

+0

Предполагается, что T0.Z и T1.Z <= Z, а T2.Z> Z. Чем больше ваш треугольник выровнен по плоскости XY, тем лучше. Если это не работает, мне очень жаль, и я, должно быть, допустил ошибку :( –

Смежные вопросы