Προγραμματισμός

* Γνώση Υπολογιστών >> Προγραμματισμός >> C /C + + Προγραμματισμός

Πώς να υπολογίσετε διασταυρούμενες Κύκλοι σε C + +

Υπολογισμός τα σημεία τομής των δύο κύκλων είναι κάπως δύσκολο πρόβλημα στη γεωμετρία , αλλά η λύση είναι απλή και απλή στην εφαρμογή σε C ​​+ + . Θα χρειαστείτε κάποιο είδος του σημείου τάξης που διαθέτει, ότι μπορεί να χειριστεί τις βασικές αριθμητικές πράξεις, όπως πρόσθεση και την αφαίρεση των 2 - διαστάσεων σημεία . Αν δεν έχετε ένα , μπορείτε να χρησιμοποιήσετε ένα std :: φορέα από Standard Template Library με τον ίδιο τρόπο . Τα πράγματα που θα χρειαστείτε
τάξη Point που χειρίζεται βασικές αριθμητικές πράξεις
Η Εμφάνιση Περισσότερες οδηγίες
Έλεγχος για Ειδικές Περιπτώσεις
Η 1

Υπολογίστε την απόσταση μεταξύ των κέντρων των κύκλων :
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 ) /απόσταση?
Η
εικόνων

Συναφής σύστασή

Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα