当前位置: 首页>>代码示例>>C++>>正文


C++ Triangle::A方法代码示例

本文整理汇总了C++中Triangle::A方法的典型用法代码示例。如果您正苦于以下问题:C++ Triangle::A方法的具体用法?C++ Triangle::A怎么用?C++ Triangle::A使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Triangle的用法示例。


在下文中一共展示了Triangle::A方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1:

Triangle::Triangle(const Triangle & t):
    m_a(t.A()),
    m_b(t.B()),
    m_c(t.C()),
    m_interpolatedNormales(t.interpolatedNormales())
{
}
开发者ID:bobbyblues,项目名称:Iwao,代码行数:7,代码来源:triangle.cpp

示例2: rayIntersectsPlane

/**
 * Prueft ob der Strahl ray die Ebene, welche durch das Dreieck
 * triangle definiert ist, schneidet.
 * @param ray Zu testender Strahl
 * @param triangle Dreieck das die Ebene beschreibt
 * @param result Ergebnisvektor: Schneidet der Strahl die Ebene
 * liegt das Ergebnis in result vor
 * @pre result Muss auf ein existierendes Vektor-Objekt zeigen
 */
bool Triangle::rayIntersectsPlane(const Ray &ray,
                                  const Triangle &triangle,
                                  Vector3D *result) const
{
    bool bResult = false;

    // Zwei Seiten des Dreieck fuer die Normalenvektorberechnung
    Vector3D ab(triangle[1] - triangle[0]);
    Vector3D ac(triangle[2] - triangle[0]);
    // Normalenvektor der Ebene, Kreuzprodukt ab x ac
    Vector3D n(ab.crossProduct(ac));
    // Konstante aus der Ebenengleichung in Normalform
    // e: n * (x,y,z) + c = 0
    VTYPE c = n * triangle.A();

    // Ortsvektor des Strahls
    Vector3D o(ray.point);
    // Richtungsvektor des Strahls
    Vector3D d(ray.dir);

    // Geradenparameter t erhaelt man durch Einsetzen der
    // Geradengleichung in die Ebenengleichung(Normalform)
    VTYPE t_denominator = n[0]*d[0] + n[1]*d[1] + n[2]*d[2];

    // Der Nenner muss gueltig(!=0) sein
    if (!IS_EQUAL(t_denominator, 0))
    {
        // Minuszeichen extrahiert, um Gleitkommazahlenungenauigkeit durch
        // Subtraktionen zu verhinden
        VTYPE t_numerator = n[0]*o[0] + n[1]*o[1] + n[2]*o[2] - c;
        VTYPE t = t_numerator / t_denominator;

        // Das extrahierte Minuszeichen wird hier durch Umkehren des
        // > Operators beruecksichtigt. Statt t>=0, also -t<=0.
        // Da jedoch bei rekursivem Raytracing die Strahlen ihren Ursprung auf Objekt-
        // oberflachen haben, muss t != 0 sein, da ansonsten sofort wieder ein
        // Schnittpunkt im Strahlenursprung festgestellt werden wuerde.
        if (IS_SMALLER(t,0)) // Ebene darf nicht hinter dem Strahl liegen
        {
            // Schnittpunkt durch Einsetzen von t in Geradengleichung
            // Auch hier muss wieder das extrahierte Minuszeichen beachtet werden
            *result = o + d * -t;
            bResult = true;
        }
    }

    return bResult;
}
开发者ID:Cashlix,项目名称:Software-Raytracer,代码行数:57,代码来源:triangle.cpp


注:本文中的Triangle::A方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。