Y determinar si el rayo intersecta el círculo

Dadas las coordenadas de dos puntos A y B, hay un rayo Representante AB.
Para dar un punto de ajuste y de coordenadas de un radio de punto O R, representante R es O como centro a un radio del círculo.
Ray preguntó si existe un punto del círculo que existe y en algún momento, tanto en el círculo de rayos común.
Número total de entrada 7, son números enteros no negativos no más de 100.
línea de salida, no es este punto de salida Y, de lo contrario la salida N.
: Ejemplo de ensayo
de entrada Test: 232 100 211
de salida esperado: N
de prueba Entradas: 101100211
salida esperada: Y
vector multiplicación:
A * B = | a | | b | * * * B = cosxa | a | * | B | cos x *
a * B = coordinar | a | * | b | * cos x vector multiplicación:
(X1, Y1) * (X2, Y2) = X1 * Y1 + X2 * Y2 (X1, y1) * (x2, y2) = x1 * x2 + y1 * y2 (x1, y1) * (x2, y2) = x1 * x2 + y1 * y2 Consejo:
Aquí Insertar imagen Descripción
comparativo ∠OAB ∠OAP y tamaño, si no ∠OAB mayor que ∠OAP, el rayo intersecta el círculo.
Se puede determinar el tamaño comparando el valor del pecado.

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
 int x1,y1,x2,y2,xo,yo;
 double r,l,k=0;
 cin>>x1>>y1>>x2>>y2>>xo>>yo>>r;
 k=(y2-y1)/(x2-x1);
 l=abs(k*xo-yo+y1-k*x1)/(sqrt(k*k+1));
 if(l==r)
 {
  cout<<'Y';
 }
 else
 {
  cout<<'N';
 }
}

o

#include <iostream>
#include <cmath>
using namespace std;
float len(int x1,int y1,int x2,int y2)
{
      int t = (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2);
      return sqrt(t);
}
int main()
{
    int xa,ya,xb,yb,xo,yo,R;
    cin>>xa>>ya>>xb>>yb>>xo>>yo>>R;
    if(xa==xb && ya==yb) 
 {
  cout<<"N";return 0;
 }
    float OA = len(xa,ya,xo,yo);
    float OB = len(xb,yb,xo,yo);
    if(OA<=(float)R || OB<=(float)R) 
 {
  cout<<"Y";return 0;
 }
    else
 {
     int son_cos = (xo-xa)*(xb-xa)+(yo-ya)*(yb-ya);
     float mother_cos = len(xa,ya,xo,yo)*len(xa,ya,xb,yb);
     float cos = (float)son_cos/mother_cos;
     float my_sin = sqrt(1-cos*cos);
     float sin = (float)R/len(xa,ya,xo,yo);
     if(cos<=0)
  {
   cout<<"N";
   return 0;
  }
     else if(my_sin<=sin) 
  { 
   cout<<"Y";
   return 0;
  }
      else 
  {
   cout<<"N";
   return 0;
  }
}  
}
Publicados 102 artículos originales · ganado elogios 93 · vistas 4981

Supongo que te gusta

Origin blog.csdn.net/huangziguang/article/details/104575752
Recomendado
Clasificación