Berechnete Koordinaten ungenau

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
mk-soft
Beiträge: 3308
Registriert: 24.11.2004 13:12
Wohnort: Germany

Berechnete Koordinaten ungenau

Beitrag von mk-soft »

Das Grafik Objekt kann gedreht werden.
Der Drehpunkt ist immer oben link und Winkel 0 ist oben und im im Uhrzeigersinn.

Mathematisch ist Winkel 0 rechts und gegen den Uhrzeigersinn.

Ich glaube das ich jetzt richtig rechne, aber das Ergebnis ist ist genau
Bei Winkel 0 müsste Display X = 900 und Display Y = 850 sein

Code: Alles auswählen

;-TOP

; x, y = Mitte Objekt
; angle = -180 .. 180 (Degree); Winkel 0 = Oben; Uhrzeigersin
; dx, dy = Breite und höhe Objekt

; Koordinaten raum = Oben Links Null
; Koordinaten objekt = mitte
; Drehpunkt object = oben links 

Procedure Position(x, y, angle, dx, dy, *display_x.integer, *display_y.integer)
  Protected c0.d, alpha.d, a_object.d, alpha2.d
  Protected a0.d, b0.d, a1.d, b1.d
  
  a0 = dx / 2
  b0 = dy / 2
  
  c0 = Sqr(a0 * a0 + b0 * b0)
  alpha_objekt = ATan(dy/dx)
  alpha = Radian(270 - angle)
  
  alpha2 = alpha - alpha_objekt
  a1 = Sin(alpha2) * c0
  b1 = Cos(alpha2) * c0
  
  *display_x\i = x + a1
  *display_y\i = y + b1
  
EndProcedure

Global x = 1000
Global y = 1000
Global dx = 200
Global dy = 300

Global x1.integer
Global y1.integer

For angle = 0 To 180 Step 45
  Position(x,y,angle,dx,dy, @x1, @y1)
  Debug "Winkel = " + angle
  Debug "Display X = " + x1\i
  Debug "Display Y = " + y1\i
Next
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.7x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf My Webspace
Sirius-2337
Beiträge: 71
Registriert: 29.05.2010 20:55

Re: Berechnete Koordinaten ungenau

Beitrag von Sirius-2337 »

Einmal EnableExplicit drüber setzen, dann weisst du wo der Fehler liegt.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6826
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Berechnete Koordinaten ungenau

Beitrag von STARGÅTE »

Code: Alles auswählen

Protected c0.d, alpha.d, a_object.d, alpha2.d
Im Code verwendest du aber

Code: Alles auswählen

alpha_objekt = ATan(dy/dx)
Somit wäre alpha_objekt eine Integer.

Außerdem solltest du ATan2(dx, dy) benutzen, um die Definitionslücke bei dx=0 zu vermeiden und einen Vollkreis als Ergebnis zu bekommen.
PB 5.73 ― Win 10, 20H2 ― Ryzen 9 3900X ― Radeon RX 5600 XT ITX ― Vivaldi 4.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
mk-soft
Beiträge: 3308
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Berechnete Koordinaten ungenau

Beitrag von mk-soft »

Danke, also beim rumbasteln auch EnableExplicit verwenden 8)

Das muss nachher als VB-Script umgesetzt werden und in einer Visualisierung laufen (WinCC)
Funktion ATan2 gibt es nicht unter VBS. Ausserdem ist dx und dy immer größer Null.

Oder ich rechne es vor her in der SPS aus, da aus dieser die Koordinaten kommen.

Geht es noch etwas einfacher, oder ist diese schon optimal gelöst?
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.7x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf My Webspace
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6826
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Berechnete Koordinaten ungenau

Beitrag von STARGÅTE »

mk-soft hat geschrieben:Geht es noch etwas einfacher, oder ist diese schon optimal gelöst?
Du könntest es mit der Drehmatrix machen:

Code: Alles auswählen

Procedure Position(x, y, angle.d, dx, dy, *display_x.integer, *display_y.integer)
  Protected a0.d, b0.d, a1.d, b1.d
  
  a0 = dx / 2
  b0 = dy / 2
  angle = Radian(angle)
  
  a1 = Cos(angle) * a0 - Sin(angle) * b0
  b1 = Sin(angle) * a0 + Cos(angle) * b0
  
  *display_x\i = x - a1
  *display_y\i = y - b1
  
EndProcedure
Das spart das ATan und die Wurzel und Sin() und Cos kannst du vllt noch zwischenspeichern.
PB 5.73 ― Win 10, 20H2 ― Ryzen 9 3900X ― Radeon RX 5600 XT ITX ― Vivaldi 4.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
mk-soft
Beiträge: 3308
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Berechnete Koordinaten ungenau

Beitrag von mk-soft »

Super :allright:

Danke STARGATE
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.7x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf My Webspace
Antworten