boolean pto2D::dentro3 (pto2D A, pto2D B, pto2D C) //Ha de ser un metodo estricto, aunque se ponen >= { pto3D bisA = B.menos (A).aversor ().mas (C.menos (A).aversor ()); //bisectrices pto3D bisB = A.menos (B).aversor ().mas (C.menos (B).aversor ()); double angulo1 = C.menos (A).anguloconr (bisA); //angulos maximos double angulo2 = C.menos (B).anguloconr (bisB); double anguloP1 = menos (A).anguloconr (bisA); //Angulos del candidato double anguloP2 = menos (B).anguloconr (bisB); if ((anguloP1 <= angulo1) && (anguloP2 <= angulo2)) return true; else return false; }
boolean pto2D::dentrocasi3 (pto2D A, pto2D B, pto2D v1, pto2D v2) //ptos comprendidos en el triangulo cuyo lado esta formado por AB //los lados marcados por v1 (que emerge de A) y v2 (de B) //Ha de ser un metodo estricto { pto3D vAB = B.menos (A); pto3D vBA = A.menos (B); pto3D bisA = vAB.aversor ().mas (v1.aversor ()); //bisectrices pto3D bisB = vBA.aversor ().mas (v2.aversor ()); double angulo1 = v1.anguloconr (bisA); //angulos maximos double angulo2 = v2.anguloconr (bisB); double anguloP1 = menos (A).anguloconr (bisA); //Angulos del candidato double anguloP2 = menos (B).anguloconr (bisB); if ((anguloP1 <= angulo1) && (anguloP2 <= angulo2)) return true; else return false; }
void main (void) { char cad[50], resp; int total, esta; clrscr (); do { printf ("Introduzca un número: "); do { gets (cad); menos (cad); total = strlen (cad); esta = comprobar (cad, total); if (esta != 0) { printf ("No metas porquería."); if (indice != total - 1) printf (" A partir de la %c no vale.", cad[indice]); else printf (" La %c no vale.", cad[indice]); printf ("\nIntroduzca otro: "); } if (total == 0) esta = 1; } while (esta != 0); ceros (cad); total = strlen (cad); leer (cad, total); printf ("\n\n¿Desea probar otro número?(s/n): "); do { resp = getche (); printf ("\n"); resp = tolower (resp); if ((resp != 's') && (resp != 'n')) printf ("¿Otro número?(s/n): "); } while ((resp != 's') && (resp != 'n')); } while (resp == 's'); }
boolean pto2D::dentro4cv (pto2D A, pto2D B, pto2D C, pto2D D, double p) { /* * SOLO VALIDO PARA TRAP CONVEXOS * C---------------------D * / \ * A-------------------------B * TRAPEZOIDE MAGICO compuesto por A= 0, B quiral 1er tubo * C origen segundo tubo D=final segundo tubo * angulos subtendidos BAC y CDB */ //Calculamos centroide, pto2D centro = A.mas (B).mas (C).mas (D).escala (0.25).a2D (); //Vectores de conexion a cada uno de los cuatro pto2D ca = A.menos (centro).a2D (); pto2D cb = B.menos (centro).a2D (); pto2D cc = C.menos (centro).a2D (); pto2D cd = D.menos (centro).a2D (); //y nuevos puntos, expandidos A = centro.mas (ca.escala (p)).a2D (); B = centro.mas (cb.escala (p)).a2D (); C = centro.mas (cc.escala (p)).a2D (); D = centro.mas (cd.escala (p)).a2D (); pto3D bisA = B.menos (A).aversor ().mas (C.menos (A).aversor ()); //bisectrices pto3D bisD = B.menos (D).aversor ().mas (C.menos (D).aversor ()); double anguloA = C.menos (A).anguloconr (bisA); //angulos maximos double anguloD = B.menos (D).anguloconr (bisD); // double anguloPbisA = menos (A).anguloconr (bisA); //Angulos del candidato double anguloPbisD = menos (D).anguloconr (bisD); if ((anguloPbisA < anguloA) && (anguloPbisD < anguloD)) return true; else return false; }