Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Suche auch Formel^^

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Caran



Anmeldungsdatum: 11.03.2007
Beiträge: 290
Wohnort: Lörrach

BeitragVerfasst am: 12.02.2008, 22:21    Titel: Suche auch Formel^^ Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 12.02.2008, 22:28    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Caran



Anmeldungsdatum: 11.03.2007
Beiträge: 290
Wohnort: Lörrach

BeitragVerfasst am: 12.02.2008, 22:34    Titel: Antworten mit Zitat

Die Gerade wird durch zwei Punkte im Raum definiert, durch die sie geht.
Und danke für die schnelle Antwort. zwinkern

MfG Caran
_________________
Eine Erkenntnis von heute kann die Tochter eines Irrtums von gestern sein.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 12.02.2008, 23:48    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
_Gorgon



Anmeldungsdatum: 04.01.2008
Beiträge: 16
Wohnort: Heidelberg

BeitragVerfasst am: 12.02.2008, 23:54    Titel: Antworten mit Zitat

Hi lächeln
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 zwinkern

Grüße Gorgon
_________________
Who is general failure
and why is he reading my harddisk?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Caran



Anmeldungsdatum: 11.03.2007
Beiträge: 290
Wohnort: Lörrach

BeitragVerfasst am: 13.02.2008, 16:16    Titel: Antworten mit Zitat

Hoi,
danke für die Antworten. Ich bemüh mich das zu begreifen und es nicht nur einzubinden zwinkern
Also...joa danke, und bis zu nächsten mal.happy
MfG Caran
_________________
Eine Erkenntnis von heute kann die Tochter eines Irrtums von gestern sein.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz