Entwickler-Ecke
Sonstiges (Delphi) - Kleines Matheproblem - 3
Aya - Mi 27.11.02 06:10
Titel: Kleines Matheproblem - 3
Hi,
und wiedermal ein Matheproblem...
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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!