Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

30.01.2008, 17:13

Point Circle Intersection

Also normal sollte man doch herausfinden können ob ein Punkt im Kreis ist, in dem man folgendes macht:

C-/C++-Quelltext

1
2
3
vector2 circle_position;
vector2 point;
bool in_circle := ((circle_position.x)² + (circle_position.y)²) <= circle_radius²;
oder?

Warum gibt mir dann:

C-/C++-Quelltext

1
2
3
4
5
6
inline bool point_in_circle(const double* x, const double* y, const Circle* circle)
{ 
    const double diff_x(*x - circle->x);
    const double diff_y(*y - circle->y);
    return ((diff_x * diff_x) +  (diff_y * diff_y)) <= (circle->r * circle->r); 
}
bei
Kreis an 0,0 mit Radius 0.5 und P(0.5, 0) false zurück?
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

30.01.2008, 17:20

Evtl Rundungsfehler? :)
@D13_Dreinig

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

3

30.01.2008, 17:22

was sagt den gevadder debugger, wenn du dir die werte ma anzeigen lässt bei den termen?

auch wenns denke ich kein fehler sein kann, lass mal das inline weg.

der algorithmus ist aber ansonsten korrekt.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

30.01.2008, 17:26

Deine Formel oben kann nicht stimmen, weil da "point" gar nicht vorkommt.
Aber der Code ist korrekt.

Nur über die Übergabe von doubles per const-Zeiger könnte man sich streiten. Das ist unnötig umständlich für denjenigen, der die Funktion benutzen will, und bringen tut es auch nichts.
Wenn überhaupt, dann solltest du konstante Referenzen nehmen.
Aber doubles kannst du ganz normal per Wert übergeben. Der Compiler weiß schon, wie er das dann am effizientesten umsetzt.

Databyte

Alter Hase

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

5

30.01.2008, 22:59

Zitat von »"David Scherfgen"«

Deine Formel oben kann nicht stimmen, weil da "point" gar nicht vorkommt.
Aber der Code ist korrekt.


Ähhh.... ich glaube x und y beschreiben den Punkt... oder ?

Was ist denn circle:: x für nen type ?
wenn der int oder so is könnte es dar nen paar konvertierungs-fehler geben
( OK... das das int is trau ich dir aber net zu ;) )

6

30.01.2008, 23:32

Ist zum Contest ;) D.h. ist es double ;)

Ehm ja stimmt im Pseudocode fehlt es. Differenz der Koordinaten ist gemeint ...
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Werbeanzeige