Как я отсекаю линейный сегмент против frustum?

Вы можете использовать ящики num или num-traits и связать свой общий тип функции с num::Float , num::Integer или любой другой признак:

extern crate num;

use num::Float;

fn main() {
    let f1: f32 = 2.0;
    let f2: f64 = 3.0;
    let i1: i32 = 3;

    println!("{:?}", sqrt(f1));
    println!("{:?}", sqrt(f2));
    println!("{:?}", sqrt(i1)); // error
}

fn sqrt(input: T) -> T {
    input.sqrt()
}

5
задан Jacob Schoen 14 September 2012 в 21:38
поделиться

2 ответа

Я не хочу входить в написание кода для этого теперь, но если я понимаю "frustum" правильно, следующее должно работать.

  1. Пересеките Строку со всеми данными плоскостями
  2. Если у Вас есть два пересечения, Вы сделаны.
  3. Если у Вас есть только одно пересечение, вычисляют переднюю плоскость и пересекаются.
  4. Если у Вас все еще есть только одно пересечение, вычисляют объединительную плату и пересекаются.

Но я, возможно, полностью неправильно понял. В этом случае уточните :)

4
ответ дан 14 December 2019 в 13:51
поделиться

Добавляя к тому, что Раздражительный Капрал сказал выше, необходимо будет знать, как пересечь линейный сегмент с плоскостью. В описании на той странице u представляет параметр в параметрическом определении Вашей строки. Во-первых, вычислите u использование одного из этих 2 описанных методов. Если значение падений u диапазона 0,0 к 1,0, то плоскость отсекает строку где-нибудь на Вашем сегменте. Включение u назад в Ваше уравнение строки дает Вам точку, где то пересечение происходит.

Другой подход должен найти направленное расстояние каждой точки к плоскости. Если расстояние одной точки положительно, и другой отрицательно, то они лежат на противоположных сторонах плоскости. Вы затем знаете, который точка вне Вашего frustum (на основе который путь Ваши плоские нормальные точки). Используя этот подход, находя точку пересечения может быть сделан быстрее путем выполнения линейной интерполяции на основе отношения направленных расстояний. Например, если расстояние одной точки +12, и другой-12, Вы знаете, что плоскость сокращает сегмент в половине, и Ваш u параметр 0.5.

Надеюсь, это поможет.

1
ответ дан 14 December 2019 в 13:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: