Υπολογίστε την απόσταση μεταξύ των κέντρων των κύκλων :
Point
δέλτα = p2 - p1 ? επιπλέουν distanceSquared = delta.X * delta.X + delta.Y * delta.Y ? απόσταση float = sqrt ( distanceSquared ) ? 2
Έλεγχος αν οι κύκλοι είναι εντελώς ξεχωριστό από το άλλο. Στην περίπτωση αυτή, η απόσταση μεταξύ των κέντρων των κύκλων θα είναι μεγαλύτερη από το άθροισμα των ακτίνων τους, οπότε δεν υπάρχει κανένας τρόπος που μπορούν να τέμνονται. Αν αυτή είναι η περίπτωση , να διαχειριστεί το σφάλμα με οποιονδήποτε τρόπο λειτουργεί καλύτερα για το πρόγραμμά σας
εάν ( distSquared > ( r1 + r2 ) * ( r1 + r2 ) ) noIntersections επιστροφή? .
Η Φτηνές 3
Ελέγξτε εάν ένας κύκλος είναι εντελώς μέσα στο άλλο . Σε αυτή την περίπτωση , θα είναι επίσης δεν υπάρχουν λύσεις
αν ( distSquared <( r1 - r2 ) * ( r1 - r2 ) ) επιστρέφει noInersections ? .
Η
4 Ελέγξτε εάν η κύκλοι είναι πανομοιότυπα. Αυτό σημαίνει ότι υπάρχει ένας άπειρος αριθμός των λύσεων - ένα για κάθε σημείο του κύκλου
αν ( distSquared == 0 && r1 == r2 ) infiniteIntersections επιστροφή? .
Η
Βρείτε το Διασταυρώσεις
5
Υπολογίστε την απόσταση από το κέντρο του πρώτου κύκλου με τη χορδή που συνδέει τα σημεία τομής
επιπλέουν chordDistanceSquared = ( r1 r1 * - . r2 * r2 - distSquared ) * ( r1 * r1 - r2 * r2 - distSquared ) /( 4 * distSquared ) ? επιπλέουν chordDistance = sqrt ( chordDistanceSquared ) ?
Η 6
Υπολογίστε το μισό του μήκους της χορδής :
επιπλέουν halfChordLength = sqrt ( r1 r1 * - chordDistanceSquared ) ?
Η 7
Βρείτε το σημείο στο κέντρο της χορδής :
Point chordMidpoint = p1 + chordDistance * δέλτα /sqrt ( distSquared ) ?
8
Υπολογίστε τις θέσεις των σημείων τομής , χρησιμοποιώντας τις πληροφορίες που έχετε υπολογίζεται μέχρι στιγμής :
Intersection1.x = chordMidpoint.x + chordDistance * ( p2.y - p1.y ) /απόσταση? Intersection1.y = chordMidpoint.y + chordDistance * ( p2.x - p1.x ) /απόσταση? Intersection2.x = chordMidpoint.x - chordDistance * ( p2.y - p1 . y ) /απόσταση? Intersection2.y = chordMidpoint.y - chordDistance * ( p2.x - p1.x ) /απόσταση?
Η
εικόνων
Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα