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

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 07.07.2008, 15:02 Titel: Rotation einer Linie |
|
|
Hallöle.
Ich möchte gerne eine Linie, bzw 4 Punkte für ein Poligon Rotieren, habe jedoch irgend wie einen rechenfehler in mein, Source drin.
So soll das ganze aussehen.
Ich erstelle 2x ein 8Eck und möchte diese mit einem Poligon verbinden. Dazu muss ich jedoch je 2 Punkte der Poligonende so rotieren, das sie zum einen im im Achteck liegen, und zum anderen müssen sie jeweils gegenüber vom Mittelpunkt des jeweiligen 8 Eck's liegen. (Siehe Bild , die Roten Punkte)
Ihc versuche hier über den Satz des Pytagoras den entsprechenden Winkel heraus zu rechnen, um anschliessend mit der Sin und Cos Funktion die entsprechenden Punkte auszurechnen. Allerdings scheint es schon Probleme beim ausrechnen des Winkels zu geben.
Dabei soll es egal sein, auf welcher Seite der 2te Punkt sich befindet. Ob davor, dahinter, darüber oder unterhalb des ersten Punktes.
Die Aktuelle Funktion sieht so aus:
Code: | Sub F_I_ECAD_MakePolygon_Line(V_PosX1 as Double, V_PosY1 as Double, V_PosX2 as Double, V_PosY2 as Double, V_Width as Double, B_ArrayD() as GdkPoint)
Dim W2 as Double = V_Width / 2
Redim B_ArrayD(3) as GdkPoint
Dim XW as Double
Dim XH as Double
'Daten für Pythagoras vorbereiten
If V_PosX1 > V_PosX2 Then
XW = V_PosX1 - V_PosX2
Else: XW = V_PosX2 - V_PosX1
End If
If V_PosY1 > V_PosY2 Then
XH = V_PosY1 - V_PosY2
Else: XH = V_PosY2 - V_PosY1
End If
'Hypotenuse ausrechnen
Dim XHyp as Double = Sqr((XH ^ 2) + (XW ^ 2))
'Alpha-Winkel ausrechnen
Dim XAlpha as Double = XH / XHyp
'Sinus und Cosinus für die gegenüberliegenden Punkte auf dem 8Eck errechnen.
Print XAlpha & " - " & Sin(XAlpha)
B_ArrayD(0).X = CInt(V_PosX1 - (Sin(XAlpha) * V_Width))
B_ArrayD(0).Y = CInt(V_PosY1 - (Cos(XAlpha) * V_Width))
B_ArrayD(1).X = CInt(V_PosX1 + (Sin(XAlpha + 45) * V_Width))
B_ArrayD(1).Y = CInt(V_PosY1 + (Cos(XAlpha + 45) * V_Width))
'Andere Punkte erstmal egal.
B_ArrayD(2).X = CInt(V_PosX1 + 200)
B_ArrayD(2).Y = CInt(V_PosY1 - 200)
B_ArrayD(3).X = CInt(V_PosX1 + 100)
B_ArrayD(3).Y = CInt(V_PosY1 + 200)
|
Sieht jemand das Problem?
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 07.07.2008, 19:57 Titel: |
|
|
äh stell dir einfach ne rotationsmatrix auf und multiplizier die koordinaten drüber? google mal so in die richtung affine lineare transformation oder sowas _________________ "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 |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 07.07.2008, 20:49 Titel: |
|
|
@dreael Wunderbar .. Funzt einwandfrei! ... VIELEN DANK!
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
 |
|