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:

Linie verlängern

 
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
Thorben



Anmeldungsdatum: 26.04.2005
Beiträge: 173
Wohnort: SH

BeitragVerfasst am: 28.10.2006, 14:19    Titel: Linie verlängern Antworten mit Zitat

Hallo

Ich möchte eine Linie, die durch Punkt A und Punkt B begrenzt ist, um 1.5 Einheiten erweitern.

Punkt A
A.x = 12
A.y = 7
A.z = -3

Punkt B
B.x = 9
B.y = 1
B.z = 4

Wie kann ich jetzt berechnen wie die Koordinaten von Punkt B sind
wenn die Linie 1.5 Einheiten länger wird?

MFG Thorben
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 28.10.2006, 14:36    Titel: Antworten mit Zitat

B' = B + 1,5 * (B-A)/|B-A|

kriegste das selbst ausgerechnet?
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Thorben



Anmeldungsdatum: 26.04.2005
Beiträge: 173
Wohnort: SH

BeitragVerfasst am: 28.10.2006, 15:18    Titel: Antworten mit Zitat

Was bedeutet das |A-B| ?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 28.10.2006, 15:26    Titel: Antworten mit Zitat

Betrag eines vektors ist seine Länge, das ist die Länge der Geraden von A nach B.

auszurechnen über sqr((B.x-A.x)*(B.x-A.x)+(B.y-A.y)*(B.y-A.y)+(B.z-A.z)*(B.z-A.z)) wenn ich mich richtig erinnere zwinkern
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 28.10.2006, 16:06    Titel: Antworten mit Zitat

Kurz gesagt: Der Betrag, geht in FreeBASIC mit ABS()
_________________
Code:
#include "signatur.bi"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 28.10.2006, 16:10    Titel: Antworten mit Zitat

ja, aber leider nicht der betrag der differenz zweier TYPEs mit jeweils drei single subvars ;D
Code:
TYPE vektor
x as single
y as single
z as single
END type

print ABS(type<vektor>(3,4,5))

das wird nicht gehen, hm? ;p
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra


Zuletzt bearbeitet von MisterD am 28.10.2006, 16:20, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 28.10.2006, 16:19    Titel: Antworten mit Zitat

Jo, stimmt.

Hab mal wieder nich alles gelesen xD
_________________
Code:
#include "signatur.bi"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 28.10.2006, 16:25    Titel: Antworten mit Zitat

wo steht da was von vier? ich glaub du hast dich verlesen *g*
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 28.10.2006, 16:25    Titel: Antworten mit Zitat

Hi,
probier's doch mal so:
Code:
Option Explicit
   '+------------------------------------------------------------------------------------------+
   '|   Header: Bestimmen der Übergabeparameter'                                               |
   '|           AnzeigeCheck:|Il1 sind Alt-0124, Großes i, kleines L, Eins „ä”ö?üáߎę֚Üñ±¸©ø°|
  Const Author="3D.Bas v016bSE ©2006 by ytwinky, MD"'                                         |
   '|           (Tastenkombination: keine)                                                     |
   '|                                                                                          |
   '|   Zweck : Schablone für neue Dateien                                                     |
   '+------------------------------------------------------------------------------------------+
Type xyz
  x As Single
  y As Single
  z As Single
End Type

Function Strecke3D(byVal A As xyz, byVal B As xyz) As Single
  Return Sqr((A.x-B.x)^2+(A.y-B.y)^2+(A.z-B.z)^2)
End Function

Function BerechneKoordinaten(byVal AnfangsPunkt As xyz, byVal EndPunkt As xyz, byVal Faktor As Single) As xyz
  Dim NeuPunkt as xyz
  NeuPunkt.x=AnfangsPunkt.x+(EndPunkt.x-AnfangsPunkt.x)*Faktor
  NeuPunkt.y=AnfangsPunkt.y+(EndPunkt.y-AnfangsPunkt.y)*Faktor
  NeuPunkt.z=AnfangsPunkt.z+(EndPunkt.z-AnfangsPunkt.z)*Faktor
  Return NeuPunkt
End Function

Dim Faktor As Single=1.5
Dim As xyz A, B, C
'A.x=12:A.y=7:A.z=-3
'B.x=9:B.y=1:B.z=4
A.x=2:A.y=2:A.z=2
B.x=1:B.y=1:B.z=1

?Author
C=BerechneKoordinaten(A, B, Faktor)
?"Koordinaten:"
?"Pnr A", " B", " C"
?"x: "; A.x, B.x, C.x
?"y: "; A.y, B.y, C.y
?"z: "; A.z, B.z, C.z
?"Strecke A..B=" &Strecke3D(A, B)
?"Strecke A..B'=" &(Strecke3D(A, B)*Faktor)
?"Strecke A..C=" &(Strecke3D(A, C))
?"Faktor=" &(Strecke3D(A, C)/Strecke3D(A, B))
?"Strecke B..C=" &(Strecke3D(B, C))
?"Faktor=" &(Strecke3D(B, C)/Strecke3D(A, B))
?"Eniki..";
Sleep
End
Wenn die Ergebnisse deinen Erwartungen entsprechen, dann isses ja gut..grinsen
[Edit]
..berichtigte Version verlegen
[Edit]
Function() eingebaut..
..Protokoll erweitert..
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..

Zuletzt bearbeitet von ytwinky am 30.10.2006, 11:57, insgesamt 3-mal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Thorben



Anmeldungsdatum: 26.04.2005
Beiträge: 173
Wohnort: SH

BeitragVerfasst am: 30.10.2006, 02:08    Titel: Antworten mit Zitat

Danke für eure Antworten.

Ich hab jetzt aber noch ein problem wenn die Koordinaten jetzt so währen:

Punkt A
A.x = 2
A.y = 2
A.z = 2

Punkt B
B.x = 1
B.y = 1
B.z = 1

Wird die linie nicht um 1.5 Einheiten länger sondern um 1.5 einheiten kürzer. Wie kann ich das ändern?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 30.10.2006, 10:54    Titel: Antworten mit Zitat

Hi,
Das Programm liefert offensichtlich die richtigen Koordinaten:
3D.Bas v016bSE ®2006 by ytwinky, MD hat Folgendes geschrieben:
Koordinaten:
Pnr A B C
x: 2 1 0.5
y: 2 1 0.5
z: 2 1 0.5
Strecke A..B=1.732051
Strecke A..B'=2.598076
Strecke A..C=2.598076
Faktor=1.5
Strecke B..C=0.8660254
Faktor=0.5
..ich kann nicht erkennen, wo dein Problem ist?!?
(Durch die Änderung s.o. haben sich die Ergebnisse nicht geändert..)
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Thorben



Anmeldungsdatum: 26.04.2005
Beiträge: 173
Wohnort: SH

BeitragVerfasst am: 30.10.2006, 15:45    Titel: Antworten mit Zitat

Bei dir ist die stecke BC = 0.8660254. Die Linie sollte aber um 1.5 Einheiten länger werden also BC = 1.5

MFG Thorben
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 30.10.2006, 15:57    Titel: Antworten mit Zitat

Eine Strecke ist durch ihre beiden Endpunkte festgelegt.
(Egal, ob die Koordinaten 2- oder 3-dimensional sind grinsen )
Wenn ich eine Strecke verlängere, füge ich ein Stück hinzu.
Da gibt es nun 2 Möglichkeiten:
1. am Endpunkt hinzufügen
2. vor dem Anfangspunkt einfügen
Das Programm ist so ausgelegt, daß Punkt A der Anfangspunkt ist, also
irgendwie links von Punkt B liegt..
Diese beiden Fälle werden ausgerechnet, du hast ja die Soll-Länge der Strecke und kannst danach entscheiden, welche Koordinaten du brauchst..
Außerdem sollten wir nicht über das Beispielprogramm reden, das dir nur zeigen sollte, was MisterD meinte, wie wärs, wenn du mal dein Programm postest(oder wenigstens den relevanten Teil) grinsen
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Thorben



Anmeldungsdatum: 26.04.2005
Beiträge: 173
Wohnort: SH

BeitragVerfasst am: 30.10.2006, 17:17    Titel: Antworten mit Zitat

Komisch gerade gings noch nicht und jetzt gehts. Naja hauptsache es functioniert. So hab ich es jetzt gemacht:
Code:


   TYPE TYPE_3DVektor
      x  AS SINGLE
      y  AS SINGLE
      z  AS SINGLE
   END TYPE

   '---------------------------------------------------------------------------
   FUNCTION LineAdd( A AS TYPE_3DVektor , B AS TYPE_3DVektor , Faktor AS SINGLE ) AS TYPE_3DVektor   
   '---------------------------------------------------------------------------
   
      DIM TmpVek AS TYPE_3DVektor
      DIM VekLng AS SINGLE
   
      VekLng = SQR( ( A.x - B.x ) ^ 2 + ( A.y - B.y ) ^ 2 + ( A.z - B.z ) ^ 2 )
   
      TmpVek.x = B.x - ( A.x - B.x ) * Faktor / VekLng 
      TmpVek.y = B.y - ( A.y - B.y ) * Faktor / VekLng 
      TmpVek.z = B.z - ( A.z - B.z ) * Faktor / VekLng
     
      RETURN TmpVek
   
   END FUNCTION


Danke für eure Hilfe lächeln
MFG Thorben
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 30.10.2006, 17:28    Titel: Antworten mit Zitat

Meins war, wie bereits erwähnt, ein Beispielprogramm.
Ich vermute mal, daß du in deinem Programm diese Funktion häufiger aufrufen wirst..
..dann solltest du bei der Streckenberechnung y^2 durch y*y ersetzen, da der ^-Befehl ziemlich viel Zeit braucht(y mußt du latürnich durch deine Differenzen ersetzen grinsen)
So meine ich das:
Code:
  FUNCTION LineAdd( A AS TYPE_3DVektor , B AS TYPE_3DVektor , Faktor AS SINGLE ) AS TYPE_3DVektor
   '---------------------------------------------------------------------------
   
      DIM TmpVek AS TYPE_3DVektor, VekLng AS SINGLE
      TmpVek.x=A.x - B.x  'nur einmal berechnen
      TmpVek.y=A.y - B.y  'nur einmal berechnen
      TmpVek.z=A.z - B.z  'nur einmal berechnen
      VekLng = Faktor/SQR(TmpVek.x*TmpVek.x + TmpVek.y*TmpVek.y + TmpVek.z*TmpVek.z) 'nur einmal berechnen
   
      TmpVek.x = B.x - TmpVek.x * VekLng
      TmpVek.y = B.y - TmpVek.y * VekLng
      TmpVek.z = B.z - TmpVek.z * VekLng
     
      RETURN TmpVek
   
   END FUNCTION

Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
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