2013-07-20 3 views
-1

Im는 간단한 광선 추적기를 C#으로 만듭니다. 내 뷰포트에는 사각형 클래스가 있습니다.직사각형 광선 교차점

public class Rectangle3D 
{ 
    public readonly Point3D Point1; 
    public readonly Point3D Point2; 
    public readonly Point3D Point3; 
    public readonly Point3D Point4; 

    public Rectangle3D(Point3D point1, Point3D point2, Point3D point3, Point3D point4) 
    { 
     this.Point1 = point1; 
     this.Point2 = point2; 
     this.Point3 = point3; 
     this.Point4 = point4; 
    } 

    public Point3D FindCrossPoint(Ray ray) 
    { 
     //Intersection 
    } 

어떻게이 기능을 작성하겠습니다. 도움을 많이 주시면 감사하겠습니다. P.3 Point3D에는 필요한 모든 기능이 있습니다. 십자가, 정상화 등 ...

+0

삼각형을 통해 직사각형을 표현한 다음 충돌을 테스트했지만 실제로는 그렇게 복잡합니다. 그리고 제가 여러분에게 제가 요청한 코드를 작성해야한다고 말하지 않았습니다. 어떻게 작성해야합니까? 나를 믿어 라. 나는 그렇게 보이더라도 게으르려고하지 않는다. 나는 또한이 분야에 정말로 순진합니다. 고맙습니다. –

+0

나는 3D에서 라인 - 라인 교차를했다.하지만 사각형에 대해이 작업을 수행하는 방법을 모르겠다. –

+0

OK, 3D에서 평면과 * 선을 교차시킬 수 있습니까? –

답변

2

좋아요,이 모든 의견 대신 답 형식으로 작성하겠습니다.

1) 사각형 Ax+By+Cz+D=0 두 가지 방법 형태에 놓여 비행기 찾기 :

방법 1 :

  • 것은 찾기를

    하위 문제들로 문제를 휴식

    두 직교 라인의 방정식; 직사각형의 가장자리는 정의에 의해 직교 할 것이다.

  • 양식 Ax+By+Cz+D=0에, 선이 정의하는 평면의 방정식을 얻는 방법을 알아 내기, 두 개의 직교 라인을 감안할 때. 여기

일부 힌트 :

  • 는 두 개의 직교 선이 모두 원점을 거라고 가정하자. 벡터로 만드십시오. 이 두 벡터의 교차 곱의 의미는 무엇입니까?

  • 교차 상품 벡터와 찾고있는 비행기 간의 관계는 무엇입니까? 구체적으로, 교차 곱 벡터와 상수 A, B 및 C 사이의 관계는 무엇입니까?

방법 2 :

  • 라인에 거짓말을하지 않는 사각형의 점 세 가지를 선택; 분명히 세 모퉁이가 할 것입니다. Ax+By+Cz+D=0에서 x, y, z에 해당하는 점을 세 개의 새로운 방정식으로 대체하십시오.

2) 방정식을 얻은 후에는 평면과 광선의 교차점을 계산하십시오.

3) 교차점이있는 경우 - 광선이 평면에 평행하거나 평면에있을 수 있음을 기억하십시오 - 교차점이 사각형 내부에 있는지 확인하십시오.

  • 힌트 : 이것은 더 일반적인 문제인 "이 점이 다각형 안에 있습니까?"라는 특수한 경우입니다.