Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Caran

Anmeldungsdatum: 11.03.2007 Beiträge: 290 Wohnort: Lörrach
|
Verfasst am: 12.02.2008, 22:21 Titel: Suche auch Formel^^ |
|
|
Hey,
ich würd mal gerne wissen, wie man (rechnerisch) herausfinden kann ob eine bestimmte Strecke oder Gerade eine Kugel mit einem gewissen Radius schneidet. Was lässt sich da machen?
MfG Caran _________________ Eine Erkenntnis von heute kann die Tochter eines Irrtums von gestern sein. |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 12.02.2008, 22:28 Titel: |
|
|
Schnelle Teilantwort:
Punkt auf einer Kugel mit Mittelpunkt (0/0/0):
Code: | if x^2 + y^2 + z^2 = r^2 |
x, y und z sind die Raumkoordinaten des Punktes und r der Kugelradius.
Das mit der Gerade geht auch, muss ich aber erst etwas basteln (per Hand kann ich's, habe es aber noch nie programmiert). Abstand zwischen Punkt und Gerade berechnen und mit dem Radius vergleichen.
Antwort folgt.
Nachtrag: Ich brauche noch eine Auskunft. Wie ist denn die Gerade angegeben? _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Caran

Anmeldungsdatum: 11.03.2007 Beiträge: 290 Wohnort: Lörrach
|
Verfasst am: 12.02.2008, 22:34 Titel: |
|
|
Die Gerade wird durch zwei Punkte im Raum definiert, durch die sie geht.
Und danke für die schnelle Antwort.
MfG Caran _________________ Eine Erkenntnis von heute kann die Tochter eines Irrtums von gestern sein. |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 12.02.2008, 23:48 Titel: |
|
|
Ich hoffe mal, dass meine Formel zur Abstandsberechnung soweit stimmt:
Code: | type vector
as single x, y, z
end type
dim as vector a, b, m ' Geradenpunkte und Mittelpunkt des Kreises
a.x = 1 : a.y = 1 : a.z = 1
b.x = 3 : b.y = 1 : b.z = 1
m.x = 0 : m.y = 2 : m.z = 0
dim as single abstand, lambda
dim as vector v ' Richtungsvektor der Geraden AB
v.x = b.x - a.x
v.y = b.y - a.y
v.z = b.z - a.z
' senkrechte Projektion von M auf die Gerade AB
lambda = ((m.x - a.x)*v.x + (m.y - a.y)*v.y + (m.z - a.z)*v.z) / (v.x^2 + v.y^2 + v.z^2)
abstand = sqr( (m.x - a.x - lambda*v.x)^2 + (m.y - a.y - lambda*v.y)^2 + (m.z - a.z - lambda*v.z)^2)
print "Die Gerade AB hat von M den Abstand " & abstand & "." |
_________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
_Gorgon

Anmeldungsdatum: 04.01.2008 Beiträge: 16 Wohnort: Heidelberg
|
Verfasst am: 12.02.2008, 23:54 Titel: |
|
|
Hi
Hab dazu auch einst eine Funktion geschrieben, allerdings in DarkBASIC...
Übersetzten musst du sie schon selbst. Aber das ist ja nicht sonderlich schwer!
Code: | function line_circle_col(r_x1 as double float, r_x2 as double float, radius as double float, _
l_x1 as double float, l_x2 as double float, _
v_x1 as double float, v_x2 as double float)
local p as double float
local q as double float
local l as double float
local temp as double float
dec r_x1, l_x1
dec r_x2, l_x2
l = -1.0
temp = (v_x1 * v_x1) + (v_x2 * v_x2)
p = 2 * ((v_x1 * r_x1) + (v_x2 * r_x2)) / temp
q = ((r_x1 * r_x1) + (r_x2 * r_x2) - (radius * radius)) / temp
temp = p * p / 4.0
if (temp > q)
p = -p / 2.0
temp = sqrt(temp - q)
if sqrt((r_x1 * r_x1) + (r_x2 * r_x2)) > radius
l = -(p + temp)
else
l = -(p - temp)
endif
rem if abs(l) > 1 then l = -1.0
endif
endfunction l |
Ob du den Code verstehen willst oder nur verwenden ist deine Sache
Grüße Gorgon _________________ Who is general failure
and why is he reading my harddisk? |
|
Nach oben |
|
 |
Caran

Anmeldungsdatum: 11.03.2007 Beiträge: 290 Wohnort: Lörrach
|
Verfasst am: 13.02.2008, 16:16 Titel: |
|
|
Hoi,
danke für die Antworten. Ich bemüh mich das zu begreifen und es nicht nur einzubinden
Also...joa danke, und bis zu nächsten mal.
MfG Caran _________________ Eine Erkenntnis von heute kann die Tochter eines Irrtums von gestern sein. |
|
Nach oben |
|
 |
|