Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Thorben
Anmeldungsdatum: 26.04.2005 Beiträge: 173 Wohnort: SH
|
Verfasst am: 28.10.2006, 14:19 Titel: Linie verlängern |
|
|
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 |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 28.10.2006, 14:36 Titel: |
|
|
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 |
|
 |
Thorben
Anmeldungsdatum: 26.04.2005 Beiträge: 173 Wohnort: SH
|
Verfasst am: 28.10.2006, 15:18 Titel: |
|
|
Was bedeutet das |A-B| ? |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 28.10.2006, 15:26 Titel: |
|
|
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  _________________ "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 |
|
 |
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 28.10.2006, 16:06 Titel: |
|
|
Kurz gesagt: Der Betrag, geht in FreeBASIC mit ABS() _________________
Code: | #include "signatur.bi" |
|
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 28.10.2006, 16:10 Titel: |
|
|
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 |
|
 |
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 28.10.2006, 16:19 Titel: |
|
|
Jo, stimmt.
Hab mal wieder nich alles gelesen xD _________________
Code: | #include "signatur.bi" |
|
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 28.10.2006, 16:25 Titel: |
|
|
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 |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 28.10.2006, 16:25 Titel: |
|
|
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..
[Edit]
..berichtigte Version
[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 |
|
 |
Thorben
Anmeldungsdatum: 26.04.2005 Beiträge: 173 Wohnort: SH
|
Verfasst am: 30.10.2006, 02:08 Titel: |
|
|
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 |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 30.10.2006, 10:54 Titel: |
|
|
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 |
|
 |
Thorben
Anmeldungsdatum: 26.04.2005 Beiträge: 173 Wohnort: SH
|
Verfasst am: 30.10.2006, 15:45 Titel: |
|
|
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 |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 30.10.2006, 15:57 Titel: |
|
|
Eine Strecke ist durch ihre beiden Endpunkte festgelegt.
(Egal, ob die Koordinaten 2- oder 3-dimensional sind )
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)
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 |
|
 |
Thorben
Anmeldungsdatum: 26.04.2005 Beiträge: 173 Wohnort: SH
|
Verfasst am: 30.10.2006, 17:17 Titel: |
|
|
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
MFG Thorben |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 30.10.2006, 17:28 Titel: |
|
|
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 )
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 |
|
 |
|