/// <summary>
        /// Devuelve el valor de la curva Bziel cuyo polígono de control está formado
        /// por los trés puntos pasados por parámetro, para el parámetro u e (0,1)
        ///
        /// Formula sacada de la wikipedia
        /// B(t) = p0*((1-t)^3) + 3*P1*t*((1-t)^2) + 3*p2*(t^2)*(1-t) + p3*t^3
        /// http://es.wikipedia.org/wiki/Curva_de_B%C3%A9zier
        /// </summary>
        private PuntoFlotante GetValorEnSegmento(IList <PuntoFlotante> puntosParteCurva, double u)
        {
            if (puntosParteCurva.Count != CANTIDAD_PUNTOS_SEGMENTO)
            {
                throw new InvalidOperationException("es una Bziel de " + CANTIDAD_PUNTOS_SEGMENTO + " puntos de control");
            }

            PuntoFlotante primerSumando  = puntosParteCurva[0].MultiplicarEscalar(Math.Pow(1 - u, 3));
            PuntoFlotante segundoSumando = puntosParteCurva[1].MultiplicarEscalar(3).MultiplicarEscalar(u).MultiplicarEscalar(Math.Pow(1 - u, 2));
            PuntoFlotante tercerSumando  = puntosParteCurva[2].MultiplicarEscalar(3).MultiplicarEscalar(Math.Pow(u, 2)).MultiplicarEscalar(1 - u);
            PuntoFlotante cuartoSumando  = puntosParteCurva[3].MultiplicarEscalar(Math.Pow(u, 3));

            return(primerSumando.SumarPunto(segundoSumando.SumarPunto(tercerSumando.SumarPunto(cuartoSumando))));
        }
        public static IList RecortarPoligono(IList puntos, ViewPort viewport)
        {
            IList puntosClippeados;

            Punto pia = new PuntoFlotante(viewport.XIzq, viewport.YAbajo);
            Punto pda = new PuntoFlotante(viewport.XDer, viewport.YAbajo);
            Punto pdb = new PuntoFlotante(viewport.XDer, viewport.YArriba);
            Punto pib = new PuntoFlotante(viewport.XIzq, viewport.YArriba);

            puntosClippeados = Recortar(puntos, pia, pda);
            puntosClippeados = Recortar(puntosClippeados, pda, pdb);
            puntosClippeados = Recortar(puntosClippeados, pdb, pib);
            puntosClippeados = Recortar(puntosClippeados, pib, pia);

            return puntosClippeados;
        }
 /// <summary>
 /// No modifica el valor de this, ni del otro, devuelve un nuevo punto flotante con el valor de la suma de ambos
 /// </summary>
 /// <param name="punto"></param>
 /// <returns></returns>
 public PuntoFlotante SumarPunto(PuntoFlotante punto)
 {
     return new PuntoFlotante(this.GetXFlotante() + punto.GetXFlotante(), this.GetYFlotante() + punto.GetYFlotante());
 }
Beispiel #4
0
 /// <summary>
 /// No modifica el valor de this, ni del otro, devuelve un nuevo punto flotante con el valor de la suma de ambos
 /// </summary>
 /// <param name="punto"></param>
 /// <returns></returns>
 public PuntoFlotante SumarPunto(PuntoFlotante punto)
 {
     return(new PuntoFlotante(this.GetXFlotante() + punto.GetXFlotante(), this.GetYFlotante() + punto.GetYFlotante()));
 }