Ver Mensaje Individual
  #545 (permalink)  
Antiguo 30/12/2011, 09:00
iovan
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 17 años, 3 meses
Puntos: 188
Respuesta: Competencias PHP

Yo soy noob :D

La manera mas fácil es hacer segmentos dirigidos entre los 3 vértices respecto a 1 punto y obtener el área utilizando producto cruz, Si el area es igual a 0 se trata de una recta si es diferente se trata de un triangulo.

PHP:

Código PHP:
Ver original
  1. <?php
  2.  
  3. function magnitud($c){
  4.     return sqrt( ($c[0]*$c[0])+($c[1]*$c[1])+($c[2]*$c[2]) );
  5. }
  6.  
  7. function getVector($A,$B){
  8.     $cadena = ($B[0] - $A[0]).",".($B[1]-$A[1]).",".($B[2]-$A[2]);
  9.     return preg_split("/,/", $cadena);
  10. }
  11.  
  12. function esTriangulo($A,$B,$C){
  13.     //¿Es el mismo punto?
  14.     $equals = ($A==$B OR $A==$C OR $B==$C) ? true : false;
  15.     if($equals) return false;
  16.    
  17.     //Obtengo los puntos
  18.     $A = preg_split("/,/", $A);
  19.     $B = preg_split("/,/", $B);
  20.     $C = preg_split("/,/", $C);
  21.    
  22.     $vector1 = getVector($A, $B);
  23.     $vector2 = getVector($A, $C);
  24.    
  25.    
  26.     $i = $vector1[1]*$vector2[2] - $vector2[1]*$vector1[2];
  27.     $j = ($vector1[0]*$vector2[2] - $vector2[0]*$vector1[2])*-1;
  28.     $k = $vector1[0]*$vector2[1] - $vector2[0]*$vector1[1];
  29.    
  30.     $area_total = (magnitud(preg_split("/,/", $i.",".$j.",".$k))/2);
  31.    
  32.     if($area_total==0) return false; else return true;
  33. }
  34.  
  35. $A = "3,1,4";
  36. $B = "3,3,4";
  37. $C = "3,8,4";
  38.  
  39. if(esTriangulo($A, $B, $C)) echo "Si es un triangulo";
  40.     else echo "No es un triangulo";
  41. ?>

Feliz año nuevo un saludo y fuerte abrazo atodos mis amigos de ForosDelWeb. Nos vemos el 3 de Enero. Be Happy everybuddy!
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.