Home Hardware Networking Programmazione Software Domanda Sistemi
Conoscenza Informatica >> Programmazione >> C /C + + Programming >> .

Come calcolare cerchi che si intersecano in C + +

Calcolo dei punti di intersezione dei due cerchi è un problema un po 'complicato in geometria , ma la soluzione è semplice e semplice da implementare in C + + . Avrete bisogno di un qualche tipo di classe point a disposizione in grado di gestire operazioni aritmetiche di base , come l'addizione e la sottrazione di punti 2 -dimensionali . Se non ne avete uno , potete usare un std :: vector della Standard Template Library nello stesso modo . Cose che ti serviranno
classe Point che gestisce l'aritmetica di base
Mostra più istruzioni Appartamenti Controlla in casi particolari
1

Calcola la distanza tra i centri dei cerchi : < br

Point > delta = p2 - p1 ; float distanceSquared = delta.X * delta.X + delta.Y * delta.Y ; distanza float = sqrt ( distanceSquared ) ;
2

Arrivo se i cerchi sono completamente separati gli uni dagli altri . In questo caso , la distanza tra i centri dei cerchi sarà maggiore della somma dei loro raggi , quindi non c'è modo possono intersecarsi . Se questo è il caso , gestire l'errore nel modo che funziona meglio per il vostro programma

se ( distSquared > ( R1 + R2 ) * ( R1 + R2 ) ) noIntersections ritorno; .

3

Verificare se un cerchio è completamente dentro l'altro . In questo caso , ci saranno anche presenti soluzioni

se ( distSquared < ( r1 - r2 ) * ( r1 - r2 ) ) noInersections ritorno; .
4

Verifica se la cerchi sono identici . Questo significa che ci sono un numero infinito di soluzioni - uno per ogni punto del cerchio

se ( distSquared == 0 && r1 == r2 ) infiniteIntersections ritorno; .
< . br> Trova le intersezioni
5

Calcola la distanza dal centro del primo cerchio alla corda che collega i punti di intersezione

float chordDistanceSquared = ( r1 * r1 - r2 * r2 - distSquared ) * ( r1 * r1 - r2 * r2 - distSquared ) /( 4 * distSquared ) ; float chordDistance = sqrt ( chordDistanceSquared ) ;
6

Calcolare la metà della lunghezza della corda :

float halfChordLength = sqrt ( r1 * r1 - chordDistanceSquared ) ;
7

Trova il punto al centro della corda :

Point chordMidpoint = p1 + chordDistance * delta /sqrt ( distSquared ) ;
8

calcolare la posizione dei punti di intersezione con le informazioni che hai calcolato finora:

Intersection1.x = chordMidpoint.x + chordDistance * ( p2.y - p1.y ) /distanza ; Intersection1.y = chordMidpoint.y + chordDistance * ( p2.x - p1.x ) /distanza ; Intersection2.x = chordMidpoint.x - chordDistance * ( p2.y - p1 . y) /distanza ; Intersection2.y = chordMidpoint.y - chordDistance * ( p2.x - p1.x ) /distanza ;

 

Programmazione © www.354353.com