Aktuelle Zeit: 16.07.2019 18:49

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Berechnete Koordinaten ungenau
BeitragVerfasst: 10.03.2019 14:13 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
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:
;-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 v1.x / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Berechnete Koordinaten ungenau
BeitragVerfasst: 10.03.2019 14:52 
Offline

Registriert: 29.05.2010 20:55
Einmal EnableExplicit drüber setzen, dann weisst du wo der Fehler liegt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Berechnete Koordinaten ungenau
BeitragVerfasst: 10.03.2019 17:58 
Online
Kommando SG1
Benutzeravatar

Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Code:
Protected c0.d, alpha.d, a_object.d, alpha2.d

Im Code verwendest du aber
Code:
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.

_________________
Bild
 
BildBildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Berechnete Koordinaten ungenau
BeitragVerfasst: 10.03.2019 18:44 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
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 v1.x / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Berechnete Koordinaten ungenau
BeitragVerfasst: 10.03.2019 19:10 
Online
Kommando SG1
Benutzeravatar

Registriert: 01.11.2005 13:34
Wohnort: Glienicke
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:
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.

_________________
Bild
 
BildBildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Berechnete Koordinaten ungenau
BeitragVerfasst: 10.03.2019 19:51 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Super :allright:

Danke STARGATE

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


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye