/// <summary> /// Obtiene los puntos discretos del trayecto a realizar por el terraplen /// a partir de los puntos de control definidos en esta misma funcion. /// </summary> /// <param name="du">Delta U</param> /// <returns> /// Lista de vertices que corresponden a la curva que representa el trayecto. /// </returns> private IList <Punto> GetBsplineControlPoints(double du) { IList <Punto> ptsControl = new List <Punto>(); ptsControl.Add(new Punto(55, 80, 0)); ptsControl.Add(new Punto(72, 60, 0)); ptsControl.Add(new Punto(76, 35, 0)); ptsControl.Add(new Punto(46, 11, 0)); ptsControl.Add(new Punto(46, 0, 0)); ptsControl.Add(new Punto(46, -15, 0)); ptsControl.Add(new Punto(60, -30, 0)); ptsControl.Add(new Punto(75, -35, 0)); ptsControl.Add(new Punto(83, -50, 0)); ptsControl.Add(new Punto(83, -65, 0)); ptsControl.Add(new Punto(77, -79, 0)); ptsControl.Add(new Punto(43, -71, 0)); ptsControl.Add(new Punto(21, -63, 0)); ptsControl.Add(new Punto(1, -76, 0)); ptsControl.Add(new Punto(-8, -74, 0)); ptsControl.Add(new Punto(-25, -69, 0)); ptsControl.Add(new Punto(-52, -64, 0)); ptsControl.Add(new Punto(-63, -45, 0)); ptsControl.Add(new Punto(-57, -14, 0)); ptsControl.Add(new Punto(-40, 10, 0)); ptsControl.Add(new Punto(-45, 30, 0)); ptsControl.Add(new Punto(-67, 47, 0)); ptsControl.Add(new Punto(-57, 70, 0)); ptsControl.Add(new Punto(-23, 80, 0)); CurvaBsplineSegmentosCubicos path = new CurvaBsplineSegmentosCubicos(ptsControl); return(path.GetPuntosDiscretos(du)); }
/// <summary> /// Dibuja la curva correspondiente a la trayectoria de la camara. La misma /// se encuentra definida por los puntos de control indicados por parámetros. /// </summary> /// <param name="puntos">Puntos de control</param> public static void DibujarCamaraPath(IList <PuntoFlotante> puntos) { // Dibujo el lazo punteado que une los puntos. PlotHelper.DibujarLazoPunteado(puntos); // Dibujo los puntos para denotar su ubicación. foreach (PuntoFlotante punto in puntos) { PlotHelper.DibujarPunto(punto); } // Dibujo la curva que se forma a partir de los puntos. if (puntos.Count > 3) { CurvaBsplineSegmentosCubicos curvaCamino = new CurvaBsplineSegmentosCubicos(puntos); Gl.glDisable(Gl.GL_LIGHTING); Gl.glBegin(Gl.GL_LINE_STRIP); Gl.glPushMatrix(); Gl.glColor3d(0.5, 0.5, 0); foreach (PuntoFlotante punto in curvaCamino.GetPuntosDiscretos(0.001)) { Gl.glVertex2d(punto.X, punto.Y); } Gl.glPopMatrix(); Gl.glEnd(); Gl.glEnable(Gl.GL_LIGHTING); Gl.glColor3d(1, 1, 1); } }