Dator
 |  Startsida |  Hårdvara |  Nätverk |  Programmering |  Programvara |  Felsökning |  System |   
Programmering
  • C /C + + -programmering
  • Computer Programspråk
  • Delphi Programmering
  • Java Programming
  • JavaScript programmering
  • PHP /MySQL Programmering
  • perl Programmering
  • python Programming
  • Ruby programmering
  • Visual Basics Programmering
  • * Dator Kunskap >> Programmering >> C /C + + -programmering >> Content

    Hur man beräknar Korsande Cirklar i C + +

    Beräkning skärningspunkterna mellan två cirklar är ett lite knepigt problem i geometri , men lösningen är enkel och lätt att genomföra i C + + . Du kommer att behöva någon form av punkt klassen tillgängliga som kan hantera grundläggande aritmetik , t.ex. addition och subtraktion av 2 - dimensionella punkter . Om du inte har en, kan du använda en std :: vector från Standard Template Library på samma sätt . Saker du behöver
    klassen Point som hanterar grundläggande aritmetiska
    Visa fler instruktioner
    Kontrollera för särskilda fall
    1

    Beräkna avståndet mellan cirklarna ' centra :

    Point delta = p2 - p1 , float distanceSquared = delta.X * delta.X + delta.Y * delta.Y , float avstånd = sqrt ( distanceSquared ) ,
    2

    Check om cirklarna är helt skilda från varandra. I detta fall , kommer avståndet mellan centra hos de kretsar vara större än summan av deras radier , så det finns inget sätt att de kan korsas. Om detta är fallet , hantera felet på det sätt som fungerar bäst för ditt program

    om ( distSquared > ( R1 + R2 ) * ( R1 + R2 ) ) avkastning noIntersections , .
    Sida 3

    Kontrollera om en cirkel är helt inom den andra . I det här fallet , kommer det också att finnas några lösningar

    om ( distSquared < ( r1 - r2 ) * ( r1 - r2 ) ) tur noInersections , .
    4

    Kontrollera om cirklar är identiska. Detta innebär att det finns ett oändligt antal lösningar - en för varje punkt på cirkeln

    om ( distSquared == 0 && r1 == r2 ) tur infiniteIntersections , .
    < . br > Hitta skärningspunkterna
    5

    Beräkna avståndet från mitten av den första cirkeln till ackordet förbinder skärningspunkterna

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

    Beräkna hälften av längden på ackordet :

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

    Hitta den punkt i mitten av ackord :

    Point chordMidpoint = p1 + chordDistance * Delta /sqrt ( distSquared ) ,
    8

    Beräkna placeringen av skärningspunkter med den information som du har beräknat hittills :

    Intersection1.x = chordMidpoint.x + chordDistance * ( p2.y - p1.y ) /distans , Intersection1.y = chordMidpoint.y + chordDistance * ( p2.x - p1.x ) /distans , Intersection2.x = chordMidpoint.x - chordDistance * ( p2.y - p1 . y ) /distans , Intersection2.y = chordMidpoint.y - chordDistance * ( p2.x - p1.x ) /distans , Addera

    Tidigare:

    nästa:
    relaterade artiklar
    ·Hur man kompilerar en CPP Med en header-fil
    ·Hur man använder SQLite3 på en iPhone App
    ·Hur man lär sig C # för nybörjare
    ·ActiveX Component Tutorial
    ·Hur man gör en klocka i C
    ·Hur man använder Turbo C
    ·Hur man initiera en ArrayList
    ·Hur man använder Xcode
    ·Hur man gör videospel med C + +
    ·Hur man gör filer i MFC
    Utvalda artiklarna
    ·Hur man skriver Embedded Politik Event Manager
    ·Hur man gör en VB6 OCX
    ·Hur man lär sig PHP Web Design
    ·Så ta en skärmdump från ett fjärrsystem med hjälp …
    ·Hur att överföra flera bilder i ASP Net
    ·Lägga till rullningslister Datagrid
    ·Vilka är bindestreck och större än-tecken Syntaxes i…
    ·Hur kontrollera syntaxen i ett Perl Script
    ·Hur man skapar en App för Evo
    ·Vad är en PHP Blockera
    Copyright © Dator Kunskap http://www.dator.xyz