Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky

Domáce Hardware Siete Programovanie Softvér Otázka Systémy

Ako vypočítať pretínajúca kruhy v C + +

Výpočet priesečníkov dvoch kružníc je trochu zložité problém v geometrii , ale riešenie je jednoduché a ľahko implementovať v C + + . Budete potrebovať nejaký bod triedy k dispozícii , ktoré môžu zvládnuť základné aritmetické operácie , napríklad sčítanie a odčítanie 2 - rozmerné body . Ak nemáte , môžete použiť std :: vector zo Standard Template Library rovnakým spôsobom . Veci , ktoré budete potrebovať klipart Point trieda , ktorá spracováva základné aritmetické
Zobraziť ďalšie inštrukcie
Pozrite sa na špeciálne prípady
1

Vypočítajte vzdialenosť medzi hrotmi kruhov " :

bod delta = p2 - p1 ; float distanceSquared = delta.X * delta.X + delta.Y * delta.Y ; float vzdialenosť = sqrt ( distanceSquared ) ;
2

príchodu v prípade , že kruhy sú úplne oddelené od seba navzájom . V tomto prípade sa vzdialenosť medzi stredmi kružníc byť väčšia než súčet ich polomerov , takže neexistuje žiadny spôsob , ako sa môžu pretínať . Ak je to váš prípad , chybu spracovať akýmkoľvek spôsobom funguje najlepšie pre váš program

if ( distSquared > ( r1 + r2 ) * ( r1 + r2 ) ) return noIntersections ; .
sims 3

Skontrolujte , či jeden kruh je úplne v rámci druhej . V tomto prípade , bude existovať tiež žiadne riešenie

if ( distSquared < ( r1 - r2 ) * ( r1 - r2 ) ) return noInersections ; .
4

Skontrolujte , či kruhy sú identické . To znamená , že existuje nekonečný počet riešení - jeden pre každý bod na kružnici

if ( distSquared == 0 && r1 == r2 ) return infiniteIntersections ; .

Nájsť Križovatky
5

Vypočítajte vzdialenosť od stredu prvého kruhu akordu spájajúcej priesečníky

plávať chordDistanceSquared = ( r1 * R1 - . r2 * r2 - distSquared ) * ( * r1 r1 - r2 * r2 - distSquared ) /( 4 * distSquared ) , plavák chordDistance = sqrt ( chordDistanceSquared ) ;
6

Spočítať polovica dĺžky tetivy :

plávať halfChordLength = sqrt ( r1 * r1 - chordDistanceSquared ) ;
7

Nájdite bod , v strede akordu :

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

Vypočítajte umiestnenie priesečníkoch s využitím informácií , ktoré ste vypočítané tak ďaleko :

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

Najnovšie články

Copyright © počítačové znalosti Všetky práva vyhradené