Escalera - altar (Geometría Computacional, triángulo de ángulo polar del área mínima requerida para clasificar)

 

En la antigua ciudad de Mindray, de pie alto con Dios n bloque de piedra. Discutir ancianos, seleccione tres Jinseki encierra un altar. Debido a que la intensidad de la energía y su área altar inversamente proporcional al área de altar lo más pequeño posible.

En particular, si hay dos mismas coordenadas Jinseki, o tres Jinseki colineales, la zona del altar  0.000.

Los ancianos encontraron que el problema no es tan simple, tan Confíe su programa para resolver este problema.

Formatos de entrada:

En la primera línea de la entrada se le da un número entero positivo N- (. 3  ≤ n-  ≤ 5000). Entonces n líneas, cada línea tiene dos números enteros, respectivamente Jinseki abscisa y la ordenada ( -10 . 9 = <abscisa, ordenada  <10 . 9 ).

Los formatos de salida:

El área mínima del altar de salida en una fila, redondeado a tres decimales.

de entrada de la muestra:

8 
3  4 
2  4 
1  1 
4  1 
0  3 
3  0 
1  3 
4  2

Resultado de muestra:

0,500

la interpretación de la muestra

salida del valor de la figura es igual al área del triángulo en el borde rojo o púrpura.

altar.JPG

 

El significado de los problemas

N puntos para el triángulo mínimo.

solución del problema

Sobre el ángulo polar Ordenar: https://www.cnblogs.com/aiguona/p/7248311.html

Ordenar el uso ángulo más o menos polar:

Acerca del producto cruz: = 0 significa el producto cruzado de dos vectores paralelos a (coincidentes); producto cruzado> 0, el vector de un (hacia abajo en entenderse más o menos como en b) está en el sentido horario vector de dirección b; producto cruzado de <0, del vector en una dirección en sentido antihorario vector b (aproximadamente entendido como en b anteriormente en a)

Utilizamos el producto pase de ángulos polares de pequeño a grande. Por lo tanto puede dar un cierto punto en un plano dado, que están dispuestos de acuerdo con un punto central seleccionado hacia delante (inversa) en sentido horario.

 

En primer lugar a través de cada punto, como su punto central, y los otros puntos hasta n-1 vectores, estos vectores son entonces según las agujas del reloj o en sentido contrario de acuerdo con la idea de un ángulo polar tipo, a continuación, la multiplicación con un tenedor con dos adyacentes vector de encontrar la zona, se puede actualizar el mínimo.

 

1 #include <. Bits / STDC ++ h>
 2  const  int INF = 0x3f3f3f3f ;
3 typedef largo  tiempo LL;
4  const  dobles eps = 1E- 8 ;
5  const  int mod = 1e9 + 7 ;
6  const  int maxN = 1e5 + 10 ;
7  usando  espacio de nombres std;
8  
9  struct nodo
 10  {
 11      LL x, y;
12 } P [ 5005 ], C [ 5005]; // punto de depósito P, C memoria vector 
13 es  
14  BOOL CMP (Nodo A, el Nodo B) // vector ordenada en sentido horario 
15  {
 16      retorno AX * BX por-AY *> 0 ;
 . 17  }
 18 es  
. 19  int principal ( )
 20 es  {
 21 es      #ifdef el DEBUG
 22 es      la freopen ( " sample.txt " , " R & lt " , stdin);
 23 es      #endif 
24      
25      int n-;
 26 es      Scanf ( " % D " , y n-);
 27     para ( int i = 1 ; i <= n; i ++ )
 28          scanf ( " % LLD% LLD " , y P [i] .x, y P [i] .y);
29      LL ans = 0x3f3f3f3f3f3f3f3f ;
30      para ( int i = 1 ; i <= n; i ++ )
 31      {
 32          int cnt = 0 ;
33          para ( int j = 1 ; j <= n; j ++ )
 34          {
 35              si (! I = j)
 36              {
37                  C [++ cnt] .x = P [j] .x- P [i] .x;
38                  C [cnt] .y = P [j] .y- P [i] .y;
39              }
 40          }
 41          sort (C + 1 , C + cnt + 1 , cmp);
42          para ( int j = 2 ; j <= cnt; j ++ )
 43              ans = min (ans, abs (C [j] .y * C [j- 1 ] .x - C [j] .x * C [j - 1 ] .y));
44      }
 45      printf ( " % .3f \ n " , ans * 1,0 / 2 );
46     
47      de retorno  0 ;
48 }

 

 

 

 

 

-

Supongo que te gusta

Origin www.cnblogs.com/jiamian/p/12536223.html
Recomendado
Clasificación