CRay3 VoronoiDiagram::getRayBoundedToArena(const CRay3 &ray) const {
    Real startX, startY, endX, endY;
    bool edgeWasClipped = LiangBarsky(
            arenaLimits.GetMin().GetX(),
            arenaLimits.GetMax().GetX(),
            arenaLimits.GetMin().GetY(),
            arenaLimits.GetMax().GetY(),
            ray.GetStart().GetX(), ray.GetStart().GetY(),
            ray.GetEnd().GetX(), ray.GetEnd().GetY(),
            startX, startY, endX, endY);

    if (!edgeWasClipped)
        throw EdgeNotInArea();
    CRay3 boundedRay(CVector3(startX, startY, diagramLiftOnZ),
                     CVector3(endX, endY, diagramLiftOnZ));\
    return boundedRay;
}
Ejemplo n.º 2
0
 void CQTOpenGLUserFunctions::DrawRay(const CRay3& c_ray,
                                      const CColor& c_color,
                                      Real f_width) {
    /* Save attributes and current matrix */
    glPushAttrib(GL_LINE_BIT);
    /* Set line attributes */
    glEnable(GL_LINE_SMOOTH);
    glLineWidth(f_width);
    /* Set color */
    SetColor(c_color);
    /* Draw ray */
    glBegin(GL_LINES);
    glVertex3f(c_ray.GetStart().GetX(), c_ray.GetStart().GetY(), c_ray.GetStart().GetZ());
    glVertex3f(c_ray.GetEnd().GetX(), c_ray.GetEnd().GetY(), c_ray.GetEnd().GetZ());
    glEnd();
    /* Restore saved stuff */
    glPopAttrib();
 }