Ellenőrizze tartozik, hogy egy adott ponton a szegmens (határozza meg) körök - verem túlcsordulás

Hello. Kérem, segítsen. Az általános probléma: egy koordinátarendszerben megadott szegmenst kezdődő pontnál kezdődik, és a B pontot is állítsa körök (1 doboz kör) központokkal pontokon M1, M2, M3. M100 és a sugarakkal R1, R2, R3. R100. Meg kell ellenőrizni, hogy tartozik egy adott ponton az intervallumban (set) körökben.







Általában a program működik, de ez valószínűleg nem mindig helyes. Már próbáltam egy csomó teszt esetek, minden helyesen azonosítja. De amikor elküldi a döntés az olimpia, akkor a szerver azt mondja: „Rossz válasz”. Vétkezzem minden típusú. Te is segíthetsz?

Az ábra azt mutatja, két esetben a nem-kereszteződés köríven:

  1. Ha a vonal nem metszi a kört.
  2. Amikor a vonal metszi a kerülete, és a szegmens nem metszi.






Ellenőrizze tartozik, hogy egy adott ponton a szegmens (határozza meg) körök - verem túlcsordulás

Minden egyes kör (R, M), és a szegmens AB lehetséges alkalmazni az alábbi algoritmus:

  1. Kiszámoltuk az együtthatók az egyenlet
    (A + qB) / (1 + q) a (R, M). vagy
    (Xa + q * XB - (1 + q) * xm) 2 + (ya + q * Yb - (1 + q) * ym) = 2 (1 + q) 2 * R 2:
    2 C 2 q + 2C1 q + C0 = 0, ahol a
    C0 = (xa - XM) 2 + (ya - ym) 2 - R 2,
    C1 = (xa - XM) * (xb - XM) + (ya - ym) * (Yb - ym) - R 2,
    C2 = (xb - XM) 2 + (yb - ym) 2 - R 2.
  2. Ha C0 <= 0, точка A попала в круг.
  3. Ha C2 <= 0, точка B попала в круг.
  4. Ha 2 det = C1 - C0 C2 <= 0, прямая АB с кругом не пересекается.
  5. Kiszámoljuk a gyökerek Q1 és Q2 (ha van ilyen).
  6. Ha q1> = 0 vagy Q2> = 0. a találatot. Egyébként mi nem hit.



Kapcsolódó cikkek