Entwickler-Ecke

Sonstiges (Delphi) - Kleines Matheproblem - 3


Aya - Mi 27.11.02 06:10
Titel: Kleines Matheproblem - 3
Hi,

und wiedermal ein Matheproblem...

user defined image

Bekannt:
X, Y Koordinaten der Roten Kugel
X, Y Koordinaten der Blauen Kugeln
Radius der Roten Kugel
Radius der Blauen Kugeln

Frage:
Befindet sich eine der blauen kugeln in dem bereich hinter der Roten Kugel??

(Stellt euch vor ihr würdet im Ursprung des Koordinaten system stehen und richtung roter Kugel schauen... welche der blauen Kugeln könntet ih sehen ohne das die Rote die sicht versperrt??)

Au'revoir,
Aya


mars - Mi 27.11.02 08:35

ich kann dir das prinzip zeigen, dass ich benutzen würde:

1) Ebene durch rote und blaue Kugel + Ursprung
2) nächster Punkt zur roten Kugel der blauen Kugel auf der ebene bestimmen
3) gerade durch ursprung und diesem punkt
4) schauen ob dieser punkt die rote kugel schneidet


ungefähr so; wenns nicht klar ist, schreibst du nochmal


Delete - Mi 27.11.02 11:53

So langsam lohnt sich extra für Aya schon eine Geometrie-Sparte. :mrgreen:.


Ex0rzist - Mi 27.11.02 12:04

Oder einfach mal den alten Mathehefter rauskramen. :wink:


Indeterminatus - Do 05.12.02 17:42

oder raycasting-algorithmus verwenden...gibts im internet genug resourcen dazu will nicht lang erklären...


UGrohne - Fr 06.12.02 13:20

mars hat folgendes geschrieben:

1) Ebene durch rote und blaue Kugel + Ursprung
2) nächster Punkt zur roten Kugel der blauen Kugel auf der ebene bestimmen
3) gerade durch ursprung und diesem punkt
4) schauen ob dieser punkt die rote kugel schneidet


Moin, ich bezweifle, dass das so funktioniert, denn der nächste Punkt auf der roten Kugel ist, wenn ich mich nicht irre (is schonn halbes Jahr her) immer auf der Verbindungsgerade der Mittelpunkte und da scheitert das dann schon an der jetzigen Zeichnung.

Ich würde es mal mit Tangentialebenen zur roten Kugel durch den Ursprung probieren, dann den Normalvektor bestimmen die Entfernung des Mittelpunkts einer blauen Kugel berechnen. Dann sollte man noch die Richtung des Normalvektors wissen und dann könnte mans so rauskriegen. ABer ohne Garantie

Gruß


Wolff68 - Sa 07.12.02 01:02

Also ich würde das wieder über den Abstand der Kugel zu den 2 Geraden machen:

Gerade 1:
Punkt A (0,0) bis rechten Tangentenpunkt (B) zur roten Kugel.
Abstand blauer Kugel-Mittelpunkt bis zur Geraden berechnen. Dieser sollte positiv sein, da die Kugel links der Geraden liegen muß.
Nun den blauen Kugelradius abziehen um zu sehen, ob Kugel komplett verdeckt ist. (Verdeckt, wenn Ergebnis positiv)

Gerade2:
Punkt A (0,0) bis linken Tangentenpunkt (B) zur roten Kugel.
Abstand blauer Kugel-Mittelpunkt bis zur Geraden berechnen.
Dieses Ergebnis * -1 nehmen. da Kugel rechts (negativ) liegen soll, wir aber nach * -1 wie oben weiterrechnen können.

Zum Schluß mußt Du nur noch schauen, ob der kleinere Wert dieser 2 Geradenrechnungen positiv ist. Dann ist die Kugel verdeckt.

Folgende Sonderfälle solltest Du beachten:
- Punkt A bzw Nullpunkt liegt IN der Kugel
=> Rechnet, aber Ergebnis ev. Falsch.
(Sollte aber bei Berechnung der Tangentenpunkte auffallen)
- rote Kugel liegt direkt auf Punkt A
=> Div/0

Hier übrigends noch die Punktformel um den Abstand zu berechnen:D := ((Bx-Ax)*(Py-Ay)-(By-Ay)*(Px-Ax))/SQRT(SQR(Bx-Ax)+SQR(By-Ay));


UGrohne - Sa 07.12.02 12:38

Ich weiß nicht, obs das ist was Wolf gerade gesagt hat, aber mir ist gerade ein Mathe-THema eingefallen, das nennt sich Tangentialkegel. Das sind alle Tangentialebenen an der Kugel durch einen bestimmten Punkt (hier also Ursprung). Und da kann man dann sagen, ob ein Punkt da drin ist, oder nicht...

Kannste ja mal googeln, ich weiß das nimmer so genau, Abi is schon n halbes Jahr her *g*

Gruß


Trialtom - Sa 07.12.02 16:03

hallo,

naja über winkel kann man das sehr leicht lösen, d.h. es gibt keine formel die einen das ergebnis mitteilt, aber mit ein bisschen rechnen kann man es leicht bestimmen.

Yr=Y-koordinate der roten kugel
Xr=X-koordinate der roten kugel
Yb=Y-koordinate der blauen kugel
Xb=X-koordinate der blauen kugel
Rr=radius der roten kugel
Rb=radius der blauen kugel
^=hoch

mit hilfe eines if-satzes ist es leicht:
wenn (Yb/Xb)-(sin^-1(Rb/(wurzel(Xb²+Yb²)))) UND (Yb/Xb)+(sin^-1(Rb/(wurzel(Xb²+Yb²)))) in folgenden Bereich liegen:
zwischen (Yr/Xr)-(sin^-1(Rr/(wurzel(Xr²+Yr²)))) und (Yr/Xr)+(sin^-1(Rr/(wurzel(Xr²+Yr²)))), dann ist die blaue kugel nicht zu sehen, d.h. vollständig im bereich hinter der roten kugel.
man muss leider 4 mal zahlen durchtippen im taschenrechner, aber es gibt das richtige ergebnis, hoffe das hilft vielleicht.
wenn du wissen willst wie man drauf kommt, sag bescheid.


M. Raab - So 08.12.02 16:29

Hallo,

ich geb mal meinen Senf dazu und hoffe, Du kannst was damit anfangen:

Leg das Koordinatensystem durch die rote Kugel. Die Richtungen sind Dir ja bekannt. Nun bestimmst Du den Ursprung der restlichen Kugeln und legst einen Vektor von Kugel rot nach Kugel blau: einfach die Richtungsvektoren addieren. So, nun bestimmst Du die Winkeln zu Deinem Koordinatensysem (Kosinussatz o.ä) und ckeckst, welche Vorzeichen sie haben. Daraus kannst Du dann checken, wo die Kugeln sind.

Gruß

Markus