Mehr

Wie konvertiere ich eine Bildschirmposition in geografische Koordinaten?

Wie konvertiere ich eine Bildschirmposition in geografische Koordinaten?


Ich suche nach Ressourcen, die erklären, wie ich Bildschirmkoordinaten (den Punkt, den ich auf dem Bildschirm auswähle) in geografische Koordinaten (Lat / Lon) umwandeln soll.

Ich möchte eine Anwendung erstellen, bei der ich in der vereinfachten Version einen Punkt aus einer Bildschirmkarte auswählen kann und die geografischen Koordinaten an meine Datenbank übergeben werden. Ich habe einen Kacheldienst, der Rasterkacheln aus einer .MBTILES-Datei bereitstellt, die aus OSM-Daten generiert wird, die in einer Postgres-Datenbank gespeichert sind. Der Client würde wahrscheinlich mit .NET, wahrscheinlich MVC für eine Webanwendung oder einem WPF für eine Windows-Desktopanwendung erstellt.

Ich suche nach Konzepten, damit ich selbst zusätzliche Nachforschungen anstellen kann, um herauszufinden, was ich als nächstes tun muss. Was sind die Best Practices dafür?


Zunächst ist es hilfreich zu wissen, was Sie in allgemein gebräuchlichen Begriffen tun. In diesem Fall ist es ein inverse Projektion oder ein Rückprojektion wenn Sie von projizierten (oder ebenen) Koordinaten "zurück" zu geographischen (oder kugelförmigen) Koordinaten gehen.

Zweitens müssen Sie wissen, welches projizierte Koordinatensystem Sie auf Ihrem Bildschirm haben, um die Umkehrung anzugeben. OSM nicht vertraut und bisher nur auf diesem show-a-kml-which-uses-longitude-and-latitude-epsg4326-in-google-osm-project basiert, verwendet OSM das CRS (Koordinatenreferenzsystem). bekannt als EPSG:3857.

Drittens spezifiziert CRS nicht nur die Projektionsmethode, sondern auch die Datum -- Details des Ellipsoids, das zur Darstellung der Erde verwendet wird. Es hilft, dies zu verstehen, um den nächsten Schritt richtig zu machen. Ihre geografischen Koordinaten müssen sich auf dem richtigen Datum/Ellipsoid befinden.

Viertens sollten Sie eine vorhandene Softwarebibliothek/ein vorhandenes Software-Tool finden, das Ihre zwei CRSs – projiziert und nicht projiziert – und einige projizierte Koordinaten in Lat-Long umwandelt (unprojiziert). PostGIS selbst macht einiges davon oder verwendet GDAL/OGR oder andere.

Da viele Reprojektionstools nur mit Mapping-Einheiten der "realen Welt" (z. B. m oder ft) beginnen und Ihre Starteinheiten Bildschirmpixel sind, können Sie kann benötigen einen Vorschritt 4: Konvertieren Sie die X-Y-Pixel Ihres Bildschirms in X-Y-Grundeinheiten, basierend auf dem Kartenmaßstab. Das ist ein einfacher Skalar.


Übersetzen zwischen kartesischen und Bildschirmkoordinaten

Für mein Spiel benötige ich Funktionen zum Übersetzen zwischen zwei Koordinatensystemen. Nun, es ist hauptsächlich eine mathematische Frage, aber was ich brauche, ist der C++-Code und eine kleine Erklärung, wie ich mein Problem lösen kann.

c) rechts += x (je mehr x-Wert, desto mehr rechts ist Punkt)

d) unten -= y (je weniger y, desto mehr unten ist Punkt)

Ich brauche eine einfache Möglichkeit, von einem System in ein anderes zu übersetzen und umgekehrt. Um das zu tun, (glaube ich) brauche ich etwas Wissen, wie zum Beispiel, wo die (0, 0) [obere linke Ecke in Bildschirmkoordinaten] in den kartesischen Koordinaten platziert ist.

Es gibt jedoch ein Problem, dass für einige Punkte in kartesischen Koordinaten nach der Übersetzung in Bildschirmkoordinaten die Position in Bildschirmkoordinaten negativ sein kann, was ein Unsinn ist. Ich kann die obere linke Ecke der Bildschirmkoordinaten nicht in kartesische Koordinaten (-unendlich, +unendlich) einfügen.

Wie kann ich das lösen? Die einzige Lösung, die mir einfällt, besteht darin, den Bildschirm (0, 0) im kartesischen (0, 0) zu platzieren und nur das IV-Viertel des kartesischen Systems zu verwenden, aber in diesem Fall ist die Verwendung des kartesischen Systems sinnlos.

Ich bin mir sicher, dass es Möglichkeiten gibt, Bildschirmkoordinaten in kartesische Koordinaten zu übersetzen und umgekehrt, aber ich mache mit diesen Minuswerten etwas falsch.


Koordinatenübersetzung vermeiden

Möglicherweise können Sie die Übersetzung zwischen Koordinatensystemen vollständig vermeiden.

SVGs, die in die HTML-Seite eingebettet sind (anstelle eines Bild- oder CSS-Hintergrunds), werden Teil des DOM und können ähnlich wie andere Elemente manipuliert werden. Nehmen wir zum Beispiel ein einfaches SVG mit einem einzelnen Kreis:

Darauf können Sie CSS-Effekte anwenden:

Sie können auch Ereignishandler anhängen, um Attribute zu ändern:

Das folgende Beispiel fügt einem SVG-Bild dreißig zufällige Kreise hinzu, wendet einen Schwebeeffekt in CSS an und verwendet JavaScript, um den Radius um zehn Einheiten zu vergrößern, wenn auf einen Kreis geklickt wird.


WebGL-Fabrik

Anschaulich erklärt, danke. Können Sie die entsprechende Javascript-Syntax angeben?

Dies hier ist eine sehr generische Lösung, daher gibt es keine eindeutige JavaScript-Syntax. Welche Daten (welche Matrizen und in welchem ​​Format) stehen Ihnen als Input zur Verfügung?

Ich habe eine Reihe von x,y,z-Koordinaten als Array von Scheitelpunkten.
(zum Beispiel:
0.205811 0.423383 0.403992
0.432068 0.603759 0.630250
1.032178 1.203868 1.230359)
Ich habe Probleme, von 2D auf 3D zu wechseln. Ich folgte diesem Algorithmus http://stackoverflow.com/questions/5613718/click-to-zoom-in-webgl, der der oben beschriebenen Idee ähnlich zu sein scheint, aber die Koordinaten, die ich erhalte, entsprechen nicht den tatsächlichen Scheitelpunkten Ich zeichne grafisch. Irgendwelche Ratschläge, wie das geht?

Können Sie mir genauer beschreiben, was Sie tun - ist es 3D -> 2D -> 3D, stimmen die Koordinaten überein (z. B. x und y, z nicht)?

Ich zeichne 3D-Daten. Ich möchte in der Lage sein, auf eine Bildschirmkoordinate (die im Wesentlichen 2d ist) zu klicken und daraus den nächsten entsprechenden 3D-Punkt abzuleiten. Im Beispiel werden 2 beliebige Werte für z angenommen: -1 und 0, dann wird zwischen den 2 Matrizen subtrahiert. Keiner der resultierenden Werte stimmt überein. Vielleicht verstehe ich die Umsetzung falsch?

Die Bestimmung der Z-Koordinate ist etwas schwieriger - Sie müssten nach einem Strahlschnittpunkt mit Ihrem Objekt / Ihrer Ebene suchen. Trotzdem sollten die x- und y-Koordinaten korrekt sein. Ich versuche den Code etwas genauer zu erklären, vielleicht findest du den Fehler:

double x = 2.0 * winX / clientWidth - 1
double y = - 2.0 * winY / clientHeight + 1

- winX und winY - Mauskoordinaten relativ zum 3D-Fenster oder zur Leinwand, nicht zum gesamten Bildschirm oder Browserfenster

- clientWidth und clientHeight gleich - Größe des Canvas/3D-Fensters

Matrix4-AnsichtProjektionInverse =
inverse (Projektionsmatrix *
Ansichtsmatrix)
Point3D point3D = neuer Point3D(x, y, 0)
return viewProjectionInverse.multiply(point3D)

Hier ist es nur Mathematik, mit z = 0 als Referenz (Sie sollten immer noch x erhalten und korrigieren). Diese Multiplikationsreihenfolge ist Zeilen-Bürgermeister - vielleicht verwendet Ihr Spalten-Bürgermeister?

Sie können auch überprüfen, was Sie erhalten, wenn Sie vom erhaltenen 3D-Punkt (richtig oder nicht) zurück in 2D wechseln.

var welt1 = [0,0,0,0]
var welt2 = [0,0,0,0]
var dir = [0,0,0]
var w = event.srcElement.clientWidth
var h = event.srcElement.clientHeight
// berechne XY-Clip-Raumkoordinaten
var x = (Ereignis.OffsetX-w/2)/(w/2)
var y = -(Ereignis.OffsetY-h/2)/(h/2)
mat4.inverse(pvMatrix, pvMatrixInverse)
// Clip-Raumkoordinaten in Weltraum umwandeln
mat4.multiplyVec4(pvMatrixInverse, [x,y,0,1], world1)

mein Bildschirm (relativ zur Leinwand) x, y sind korrekt - ich habe verschiedene Möglichkeiten ausprobiert, um dies zu erreichen, und jedes Mal die gleichen Werte erhalten.
dann nehme ich die Inverse meiner pvmatrix und multipliziere diese dann mit [x,y,0,1] (für den Moment sagen wir, dass alle meine z's 0 sind). Dann sollte das Ergebnis in world1 stehen. Aber wenn ich auf 1,1,0 klicke, bekomme ich kein passendes Ergebnis.

Der Code sieht für mich gut aus - der einzige Wert, der hier unbekannt ist, ist die pvMatrix. Ich denke, dass einer richtig sein sollte, da Sie Ihre Szene rendern, aber überprüfen Sie, ob er den richtigen Wert hat. Ich würde versuchen (wenn Sie es noch nicht getan haben), world1 wieder in den Bildschirmbereich zu konvertieren (bekommen Sie die event.offSet-Werte wieder?). Ansonsten ist es die gleiche Mathematik wie in meinem Code

Schönes Tutorial, klar und gut zu lesen.

Das einzige, was mir aufgefallen ist, war:

Matrix4 viewProjectionInverse = inverse(projectionMatrix * viewMatrix)

Reihenfolge der Matrixmultiplikation:

Die Multiplikationsreihenfolge sollte wie folgt geändert werden:

Danke für ein tolles Tutorial.

Hallo Ben, danke für den Kommentar, freut mich sehr! Zur Matrixordnung: Die Multiplikationsordnung ist eigentlich eine Konvektionssache. Je nachdem, was Sie Punkte als Spalten- oder Zeilenvektoren interpretieren und den Zeilen- oder Hauptspaltenmodus verwenden, kann sich die Reihenfolge ändern. In diesem speziellen Fall hier habe ich angenommen, dass die Punkte Zeilenvektoren sind und die Matrizen Zeilenhaupt (z. B. Translationskomponente in den Matrixindizes 12, 13 und 14). Schreiben Sie auf ein Blatt Papier den Operationspunkt * Welt * Ansicht * Projektion in mathematischer Notation und Sie werden sehen, was ich meine.

PS Ich hatte sowieso geplant, ein oder zwei Posts über Transformationen im Detail zu veröffentlichen, danke für die Erinnerung :)

Schönes Tutorial Denis! Ein paar Punkte:

1) Können Sie beschreiben, was genau Sie bei der Konvertierung von 3D in 2D getan haben? Code ist in Ordnung, aber für mich gibt es kleine Offset-Fehler. Um das zu korrigieren, muss ich verstehen, was der Code zu tun versucht.

2) Der Link zum Mauspicking-Tutorial funktioniert nicht.

Hy Amit, sorry für den kaputten Link - ich werde versuchen, einen guten Ersatz dafür zu finden (war ein PDF im Netz, wo ich diese Berechnungen vor ein paar Jahren zum ersten Mal gesehen habe, und kann mich jetzt nicht mehr erinnern, wie es hieß) .

Berücksichtigen Sie die 3D->2D-Konvertierung. der gesamte Vorgang kann in ein paar einfache Schritte unterteilt werden, vorausgesetzt, wir haben einen 3D-Punkt in "absoluten" Koordinaten. Zuerst versuchen wir, dieses 3D in den relativen Kameraraum zu verschieben, indem wir es mit der Ansichtsmatrix multiplizieren. Danach wird das Produkt mit der Projektionsmatrix multipliziert, um den Punkt in Clipping-Koordinaten zu erhalten.

Da die Projektions- und Ansichtsmatrix zu Beginn bekannt sind, habe ich sie zuerst und dann die Ergebnismatrix mit dem Punkt multipliziert (für einen Punkt nicht notwendig, aber stellen Sie sich vor, Sie hätten aus irgendeinem Grund 50 000 Punkte zu konvertieren).

Sobald diese Schritte abgeschlossen sind, erhalten wir einen Punkt im normalisierten Koordinatenraum ([-1,1], [-1,1]). Wir transformieren diesen 2D-Punkt in den Bereich ([0,1], [0,1]). Wenn wir dies nun mit der Fensterbreite/-höhe multiplizieren, erhalten wir die Pixelkoordinaten des Bildschirms.

Es ist mit kleinen Fehlern zu rechnen (insbesondere wegen der Rundung beim Ermitteln der normierten Koordinaten). Sie könnten versuchen, die Rundungsfunktion besser zu spezifizieren - vielleicht hier verwenden
http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm

"Sobald diese Schritte abgeschlossen sind, erhalten wir einen Punkt im normalisierten Koordinatenraum ([-1,1], [-1,1])". Wie?

Ich habe dies getan, indem ich die x,y,z-Clipping-Koordinaten durch die Clipping-Koordinate W. (die den Skalierungsfaktor der Szene darstellt) getaucht habe.

Haben Sie diesen Schritt verpasst oder war er nicht wirklich erforderlich?

Theoretisch sollte es berücksichtigt und die Aufteilung vorgenommen werden. In diesem Fall habe ich jedoch angenommen, dass die w-Koordinate 1 ist und in den gesamten Daten konsistent ist (daher keine Unterteilung, ich sollte darauf im Beitrag hinweisen).

Überprüfen Sie diese beiden Links hier, vielleicht helfen sie:

Wie auch immer, was ist das genaue Problem, das Sie haben?

Ich arbeite an einem Prototyp, bei dem ich Kommissionierung und 3D->2D-Transformation durchführen musste. Ich habe beides gemacht, aber es hat viel Zeit gedauert, herauszufinden, wie man die Normalisierung durchführt. Ich denke, es wäre eine gute Idee, wenn Sie den Normalisierungsschritt im Beitrag erklären.

Ich habe auch zuerst W=1 genommen, aber nach der Multiplikation von [x,y,z,W] mit Ansichtsmatrix und Projektionsmatrix wird W zu >1 und deshalb musste ich unbedingt x,y durch W teilen.

Ich habe die Konvertierungsfunktion get3dPoint gelesen, aber nicht verstanden, wie man sie verwendet. Zum Beispiel habe ich ein Bild von einem Punkt mit Koordinaten (x, y) bzw. (2.3) wie finde ich den Point3D (x, y, z).

Hallo Denis,
Vielen Dank für die Anleitung. Ich habe mich gefragt, ob Sie einen freien Moment haben, um mir zu helfen, das herauszufinden. Ich habe das Beispiel in Javascript erstellt, aber ich habe ein kleines Problem beim Zurückkonvertieren von einem 3D-Punkt in xy. Mit anderen Worten, wenden Sie die viewProjectionMatrix wieder auf den 3D-Punkt an, um die normalisierte Bildschirmkoordinate zu erhalten.

// beginnend mit den nomalisierten Bildschirmkoordinaten:
screen3D[0] = 0.5
screen3D[1] = 0,5
screen3D[2] = 0
screen3D[3] = 1

var viewProjectionMatrix = Matrix.mult(projectionMatrix,viewMatrix)
var invViewProjectionMatrix =Matrix.inverse(viewProjectionMatrix)

// Wenden Sie die inverse Projektionsansichtsmatrix an, um uns in den Weltraum zu bringen
var worldM = Matrix.multTranslate(invProjectionViewMatrix,screen3D)

//Ich kann diese worldM-Matix jetzt mit viewProjectionMatrix multiplizieren, um zu meinen normalisierten Bildschirmkoordinaten zurückzukehren.

var normScreenM = Matrix.multTranslate(projectionViewMatrix,worldM)

//Aber die worldPoint-Koordinaten nehmen.
var worldPoint = Matrix.getTrans(worldM)
//. und das Multiplizieren der ProjektionViewMatrix damit funktioniert nicht
var normScreenM2 = Matrix.multTranslate(projectionViewMatrix,worldPoint)

Ich erhalte also nicht die normalisierten Bildschirmkoordinaten aus dem Produkt von (worldPoint * ProjektionViewMatrix). Ich kann sie nur zurückbekommen, wenn ich die vollständige Matrix zum Multiplizieren habe (worldM * ProjektionViewMatrix).
Ich habe versucht, die inversen Operationen als Gesundheitsprüfung anzuwenden, um sicherzustellen, dass alles ausgecheckt ist. Leider habe ich etwas übersehen. Ich kann nicht zu meinen normalisierten Bildschirmkoordinaten zurückkehren, die mit dem worldPoint multipliziert werden.

Die klare und reale Sicht der neuesten Anzeigegeräte macht unsere Erfahrung real. das Displaysystem kann mit den richtigen stützen lebendiger gestaltet werden.. für schöne hausvorhänge und vieles mehr können sie besuchen.
Projektionswand Firma
Theatervorhang"

Sehr hilfreicher Artikel, danke! :) Ich habe tatsächlich einen ähnlichen Artikel geschrieben, um dieselbe Konvertierung durchzuführen, aber ich arbeite speziell in Maya. Für Leute, die Probleme mit dem Normalisierungsteil haben, ist dies vielleicht nützlich: http://www.gouvatsos.com/how-to-transform-3d-coordinates-to-2d-screenspace-and-vice-versa

Wenn sich der Ursprung des Bildschirms in der unteren linken Ecke statt oben links befindet, was müssen Sie dann ändern, um von 2d auf >3d umzuwandeln?

(1) doppeltes y = - 2.0 * winY / clientHeight + 1

(2) doppeltes y = 2,0 * winY / clientHeight - 1
Sie sollten also den gleichen Ansatz wie bei der x-Achse verwenden.

Außerdem erhalten Sie das gleiche Ergebnis, wenn Sie in (1) "winY" durch "clientHeight - winY" ersetzen.

Sollten Sie nicht durch z teilen, um Bildschirmkoordinaten zu erhalten?

Ich habe dies mit glm getan und es scheint zu funktionieren (tatsächlicher Code):

glm::vec2 getScreenCoord(glm::vec3 pos)<

glm::vec4 p = cameraPerspectiveMatrix*glm::vec4(pos, 1.0)
glm::vec2 s
s.x = int(((p.x/p.z + 1.0)/2.0) * winWidth + .5)
s.y = int((((1.0 - p.y/p.z)/2.0) * winHeight + .5)
kehrt zurück
>

Sie könnten auch Z-Koord aus Z-Puffer extrahieren, so etwas wie

GLfloat zbuf
getPixelInfo(x,y, GL_COLOR_ATTACHMENT0, GL_DEPTH_COMPONENT, GL_FLOAT, &zbuf)
doppelte znorm = 2,0 * zbuf - 1,0
double zreal = 2.0 * clipNear * clipFar / (clipFar + clipNear - znorm * (clipFar - clipNear))

Ich habe die letzten Stunden damit verbracht, meinen Code zu debuggen und eine Reihe von Lösungen zu lesen, die sagen, dass ich durch w teilen soll, aber es hat nicht geholfen. Schließlich habe ich Ihren Kommentar gefunden und durch z geteilt (zusätzlich zu w, falls er etwas nützliches tut) und er hat mein Problem vollständig behoben! Ich habe auch Rendering-Labels (mein Anwendungsfall für diesen Code) ausgeschlossen, wenn z < 0.0 (d. h. hinter der Kamera) sowie der degenerierte Fall, wenn w = 0. Danke für das Posten dieses Kommentars! Mit freundlichen Grüßen Die Zukunft.

Unter http://trac.bookofhook.com/bookofhook/trac.cgi/wiki/MousePicking finden Sie eine detaillierte Erklärung, wie x und y ohne die Notwendigkeit von z berechnet werden.

Bei glm handelt es sich um einen allgemeinen Codierungsansatz, der mit Blick auf WebGL geschrieben wurde, ohne die Verwendung spezieller Bibliotheken.

Ich habe ein Problem: Ich kann keinen Algorithmus oder kein Programm finden, das beschreibt, wie der Umwandlungspunkt von 2D in 3D ausgeführt wird
Wie habe ich Z gefunden?
Punkt(x,y) --> Punkt(x,y,z)
Bitte hilf mir

Ich habe es endlich herausgefunden. Das Problem ist, wenn Sie die Kamera Z auf einen bestimmten Wert einstellen (in Artikel 0), dann berechnen sich die Welten X und Y tatsächlich so, dass sie zu diesem Z passen. Wenn Sie also die X, Y-Weltkoordinaten berechnen möchten, müssen Sie wissen, für welche Welt Z Sie finden dieses X ein Y. Sobald Sie das wissen. Sie können die Kamerakoordinate Z berechnen, mit der Sie schließlich die Welt X,Y berechnen können, wie im Artikel beschrieben. Wie finden Sie die cameraZ, wenn Sie worldZ kennen? Sie müssen eine Ebene nehmen, die die Welt-Z-Koordinate enthält und deren Normale mit dem Blickrichtungsvektor identisch ist (es ist das Ziel - eyeCoor). , transformieren und dann wieder daraus machen). Und wenn Sie Kamera X, Y auf den Flugzeugäquatian setzen, erhalten Sie Kamera Z. Und das war's!

Was sind clientWidth, clinetHeight, winX, winY in der 2D-zu-3D-Konvertierungsfunktion? bitte helfen.

Bild Sie haben einen Punkt bei (100, 200) auf einer 2D-Redering-Oberfläche der Größe 640x480.

clientWidth == 640
Klinkenhöhe == 480
winX == 100
winY == 200

Ich habe einen 4 2dlocator (animiert gebacken) einer einfachen ebenen Geometriedrehung und -bewegung.
Ich brauche:
ist hier ein einfacher Mel-Skriptbefehl zum Konvertieren meines 4 2dlocator in 1 3D-Locator in der Mitte von 4 2dlocator.created 3D-Locator mit Skalierung, Transformation von x,y und xyz-Rotation.
Ist dies in Maya möglich, brauche ich diese Methode, um meine Polyplane in meinem 3D-Szenenvideo zu platzieren. mit Rotationsskala-Bewegung in 3D, aber vor der projizierten Videoebene keine Z-Bewegung erforderlich, die auf den gleichen Bildschirmraum wie die Ausgabe des Render-Videos abgestimmt ist.
jede Idee, jeder Link, jede Methode, jedes Skript, jede Software, die das gemacht hat
Bitte hilf mir

Ich arbeite an einem 3D-Scanner. Ich kann nicht verstehen, wie man Pixelkoordinaten in reale Koordinaten umwandelt.

Zum Beispiel habe ich einen Datensatz, der nur (x,y)-Koordinaten einiger Punkte auf einem Objekt in Pixeln enthält. Wie kann ich sie in reale Einheiten umwandeln (dh cm oder mm)?

Was ist winx und winy in der folgenden Funktion? Ist es nur die Breite und Höhe des Bildschirms?

Funktion Point3D get3dPoint(Point2D point2D, int width,
int Höhe, Matrixansichtsmatrix, Matrixprojektionsmatrix) <

double x = 2.0 * winX / clientWidth - 1
double y = - 2.0 * winY / clientHeight + 1
Matrix4 viewProjectionInverse = inverse(projectionMatrix *
Ansichtsmatrix)

Point3D point3D = neuer Point3D(x, y, 0)
return viewProjectionInverse.multiply(point3D)
>

Verwenden Sie die Steuerelemente im Controller-Fenster, um das Movement-Smash-Format vollständig zu ändern. Kunden können die Anzahl, das Gewicht, die Schwerkraft, die Dicke und die Wirkung des Smash-Aufpralls ändern, um ewig coole Looks zu erzielen. Motion 5 Effekte


Verwenden Sie den Grad des Sehwinkels, um die Größe und Position des Stimulus festzulegen. Dies hängt natürlich von der Entfernung des Teilnehmers zum Bildschirm sowie vom Bildschirm selbst ab. Stellen Sie also sicher, dass dies kontrolliert wird, und denken Sie daran, die Einstellung im Monitor Center zu ändern, wenn sich der Betrachtungsabstand ändert.

Raumfrequenz: Zyklen pro Grad

Benötigt: Angaben über die Bildschirmbreite in cm und Pixel und den Betrachtungsabstand in cm

Es gibt eigentlich drei Varianten: ‚deg‘, ‚degFlat‘ und ‚degFlatPos‘

'Grad' : Die meisten Benutzer, die einen Blickwinkel verwenden, gehen davon aus, dass ein Grad des Blickwinkels in allen Teilen des Bildschirms dieselbe Anzahl von Pixeln umfasst. Dies gilt nicht für Standard-Flachbildschirme – ein gewisser Blickwinkel am Bildschirmrand umfasst mehr Pixel, weil er weiter vom Auge entfernt ist. Bei moderaten Exzentrizitäten ist der Fehler gering (ein Fehler von 0,2 % bei der Größenberechnung bei einer Exzentrizität von 3°), wächst jedoch, wenn die Stimuli weiter von der Mitte des Bildschirms entfernt werden (ein Fehler von 2% bei 10 °). Für die meisten Studien wird diese Berechnungsform bevorzugt, da sie nicht zu einem verzerrten Erscheinungsbild der visuellen Reize führt. Wenn Sie jedoch bei großen Exzentrizitäten eine höhere Genauigkeit benötigen, wählen Sie eine der folgenden Alternativen.

‘degFlatPos’ : Dies berücksichtigt Flachbildschirme bei der Berechnung der Positionskoordinaten visueller Reize, lässt jedoch Größe und Ortsfrequenz unkorrigiert. Dies bedeutet, dass ein gleichmäßig verteiltes Raster visueller Reize in seiner Position verzerrt erscheint, aber

‘degFlat’: Dies korrigiert die Gradberechnungen für die Ebenheit des Bildschirms für jeden Scheitelpunkt Ihrer Stimuli. Quadratische Stimuli in der Peripherie werden daher weiter voneinander entfernt, aber sie werden auch in den Pixeln, die sie besetzen, größer und rautenförmig.


Inhalt

Koordinaten für Standorte werden unter Verwendung von zwei Zahlensätzen in einem einfachen kartesischen Koordinatensystem bereitgestellt. Auf diese Weise können Standorte mit Ostwert/Nordwert (oder x,ja) Paare. Als Konvention wird das Paar in der Regel mit Ostwert zuerst und Nordwert als zweitem dargestellt.

Zum Beispiel ist der Gipfel des Mount Assiniboine (bei 50°52′10″N 11539′03″W  /  50,86944°N 115,65083°W  / 50,86944 -115,65083 ) in der UTM Zone 11 vertreten durch 11U 594934 5636174 . Es können auch andere Konventionen verwendet werden, z. B. eine abgeschnittene Gitterreferenz [2], die die Beispielkoordinaten auf 949-361 kürzen würde.

Falscher Osten

Der lineare Wert, der allen x-Koordinaten einer Kartenprojektion hinzugefügt wird, sodass keiner der Werte in der kartierten geografischen Region negativ ist. Der Ursprungspunkt jeder UTM-Zone ist der Schnittpunkt des Äquators und des Mittelmeridians jeder Zone. Um negative Zahlen zu vermeiden, wird der Mittelmeridian jeder Zone auf 500.000 Meter östlich eingestellt.

Falscher Nordwert

Der lineare Wert, der allen y-Koordinaten einer Kartenprojektion hinzugefügt wird, sodass keiner der Werte in der kartierten geografischen Region negativ ist. der Nordwert am Äquator ist auf 10.000.000 Meter festgelegt, sodass kein Punkt einen negativen Wert hat.


Aktualisieren

Ich habe die Methode ConvertToCartesian aktualisiert, sodass sie die aus der ConvertToKeplerElements-Funktion berechnete True Anomaly (nu) als Eingabe verwendet. Dann berechnet es die exzentrische Anomalie (E) und berechnet daraus die mittlere Anomalie (Mt). Wenn ConvertToCartesian in nachfolgenden Schleifen aufgerufen wird, wird Mt mit dem entsprechenden Zeitschritt aktualisiert. Dann berechne ich E erneut aus dem aktualisierten Mt und berechne dann nu aus dem aktualisierten E. Dies löst die meisten Fälle. Das Problem ist, dass nu manchmal um 180 Grad von der Stelle berechnet wird, an der es sein sollte, wodurch der Startpunkt der angezeigten Umlaufbahn um 180 Grad verschoben wird.

In meiner ConvertToKeplerElements-Funktion ist gemäß der Mathematik nu = 2pi - nu if r.v < 0. Dies passiert zum Beispiel, wenn ich die anfänglichen r,v-Vektoren so setze, dass das Schiff weder bei Periapsis noch bei Apoapsis, sondern irgendwo dazwischen startet. Ich weiß, dass das richtig ist, aber wenn ich nu->E->nu berechne, geht dieser 180-Grad-Flip in der Berechnung verloren.

Hier sind die relevanten Teile der aktualisierten Methode ConvertToCartesian.

Hier ist das schlechte Ergebnis, das ich bekomme:


Sie haben bereits ein Konto? Hier anmelden.

Tom Allensworth,
Gründer von AVSIM Online

AVSIM ist ein kostenloser Service für die Flugsimulations-Community. AVSIM wird vollständig von Freiwilligen besetzt und alle Gelder, die an AVSIM gespendet werden, fließen direkt in die Unterstützung der Gemeinschaft. Ihre Spende hier hilft, unsere Bandbreitenkosten, Notfallfinanzierung und andere allgemeine Kosten zu bezahlen, die von Zeit zu Zeit anfallen. Danke für Ihre Unterstützung!

Spendenziele

Spenden Sie für unser jährliches allgemeines Spendenziel. Diese Spende hält unsere Türen offen und bietet Ihnen 24 x 7 x 365 Service. Ihre Spende hier hilft, unsere Bandbreitenkosten, Notfallfinanzierung und andere allgemeine Kosten zu bezahlen, die von Zeit zu Zeit anfallen. Wir setzen dieses Ziel jedes Jahr neu für das Ziel des folgenden Jahres.


5 CFR § 531.214 - Festsetzung der Bezahlung bei Beförderung.

(Ein General. Eine Agentur muss den zu zahlenden Grundgehaltssatz eines Mitarbeiters bei Beförderung gemäß den Regeln in diesem Abschnitt festlegen, im Einklang mit 5 U.S.C. 5334(b). Die Beförderungsregel in 5 U.S.C. 5334(b) und die Durchführungsbestimmungen in diesem Abschnitt gelten nur für einen GS-Mitarbeiter, der von einer GS-Besoldung in eine höhere GS-Besoldung befördert wird. Gemäß § 531.206 muss jede allgemeine Gehaltsanpassung, die am selben Tag wie eine Beförderungsmaßnahme wirksam wird, bearbeitet werden, bevor die Regeln in diesem Abschnitt angewendet werden.

(b) Geografische Umrechnung. Wenn der offizielle Arbeitsplatz eines Mitarbeiters an einen neuen Standort verlegt wird, an dem andere Gehaltstabellen gelten, muss die Agentur den Mitarbeiter auf den/die geltenden Gehaltstarif(e) und Grundgehaltssätze für den neuen offiziellen Arbeitsplatz basierend auf der Position des Mitarbeiters umstellen Aufzeichnung vor Beförderung gemäß § 531.205 vor der Bearbeitung einer gleichzeitigen Beförderungsmaßnahme.

(c) Gleichzeitige Erhöhung innerhalb der Besoldungsgruppe. Hat ein Arbeitnehmer Anspruch auf eine gleichzeitig mit einer Beförderung wirksame Erhöhung innerhalb einer Besoldungsgruppe oder einer Qualitätsstufe, muss die Agentur diese Erhöhung vor der Bearbeitung der Beförderungsmaßnahme verarbeiten.

(1. Allgemeines. Eine Agentur muss den zu zahlenden Grundgehaltssatz eines Arbeitnehmers bei Beförderung nach der Standardmethode in Absatz (d)(3) dieses Abschnitts oder der alternativen Methode in Absatz (d)(4) dieses Abschnitts bestimmen, vorbehaltlich der Sonderregelung in Absatz (d)(5) dieses Abschnitts für Mitarbeiter, die vor der Beförderung einen Selbstbehalt erhalten. Ob die alternative Methode anstelle der Standardmethode verwendet wird, hängt von den Gehaltsplänen ab, die für einen Mitarbeiter vor und nach der Beförderung gelten, wie in Absatz (d)(2) dieses Abschnitts vorgesehen. In diesem Absatz (d) beziehen sich Verweise auf den Tarif oder die Spanne eines Mitarbeiters „vor der Beförderung“ auf den Tarif oder die Spanne vor der Beförderung, aber nach einer geografischen Umrechnung, die gemäß Paragraph (b) dieses Abschnitts erforderlich ist.

(2) Bestimmung der anwendbaren Methode. Die folgenden Regeln regeln die Bestimmung, welche Beförderungsmethode verwendet werden soll:

(i) Wenden Sie die Standardmethode ausschließlich an, wenn für den Arbeitnehmer vor und nach der Beförderung die gleichen Gehaltspläne gelten. Beispielsweise kann ein Mitarbeiter vor und nach der Beförderung durch den allgemeinen Tarif und den gleichen Tariftarif abgedeckt sein.

(ii) Wenden Sie die alternative Methode an, wenn für den Mitarbeiter vor und nach der Beförderung unterschiedliche Gehaltspläne gelten und wenn die alternative Methode bei der Beförderung zu einem höheren zu zahlenden Tarif führt als die Standardmethode. Beispielsweise kann ein Mitarbeiter nach der Beförderung durch einen Sondertarif abgedeckt sein, der vor der Beförderung nicht für ihn galt, und die alternative Methode führt zu einem höheren Tarif.

(iii) unter allen anderen Umständen die Standardmethode anwenden, mit der Ausnahme, dass eine Agentur nach eigenem und ausschließlichem Ermessen die alternative Methode für einen Mitarbeiter anwenden kann, der vor und nach der Beförderung unterschiedlichen Gehaltsplänen unterliegt, auch wenn die Methode zu einem niedrigeren zu zahlenden Satz führt als die Standardmethode, jedoch nur unter folgenden Bedingungen:

(A) Die Agentur stellt fest, dass die Anwendung der Standardmethode aufgrund der Feststellung, dass das höhere Gehalt für die Stelle vor der Beförderung nicht ausreichend mit den für die Stelle nach der Beförderung erforderlichen Kenntnissen und Fähigkeiten in Zusammenhang steht, unangemessen wäre und

(B) Die Agentur informiert den Mitarbeiter vor dem Inkrafttreten der Beförderung über die Entscheidung, die alternative Methode zu verwenden.

(i) Die Standardmethode zur Anwendung der Beförderungsregel ist in der folgenden Tabelle dargestellt:

Aktionsregel – Standardmethode
Schritt A Wenden Sie gegebenenfalls die geografische Umrechnungsregel in § 531.205 an, um den/die Tarif(e) und die Bandbreite(n) des Grundgehalts des Arbeitnehmers basierend auf der Position des Arbeitnehmers vor der Beförderung und der neuen offiziellen Arbeitsstätte zu bestimmen, wie in Absatz (b) von . gefordert diese Abteilung. Geben Sie gegebenenfalls auch eine gleichzeitige Erhöhung innerhalb einer Besoldungsgruppe oder eine Qualitätsstufenerhöhung gemäß Absatz (c) dieses Abschnitts an. Verwenden Sie den/die resultierende(n) Grundgehaltssatz(e) als den/die bestehenden Satz(e), die unmittelbar vor der Beförderung in Kraft sind, um die Schritte B und C anzuwenden.
Schritt B Ermitteln Sie den bestehenden GS-Tarif des Mitarbeiters (oder den LEO-Sondergrundtarif) in der Besoldungsgruppe vor der Beförderung und erhöhen Sie diesen Tarif um zwei GS-interne Erhöhungen für diese Besoldungsgruppe.
Schritt C Bestimmen Sie den zu zahlenden (höchsten) Grundgehaltssatz für die Stufe oder den Satz, der in Stufe B bestimmt wurde, indem Sie eine Ortszulage oder einen Sondersatzzuschlag anwenden, der für die jeweilige Besoldungsgruppe anwendbar ist, basierend auf der Position des Arbeitnehmers vor der Beförderung und dem offiziellen Arbeitsplatz nach der Beförderung. (Wenn der in Schritt B ermittelte Tarif über dem Bereichsmaximum liegt, verwenden Sie dieselbe Ortszahlung oder den gleichen Sondertarifzuschlag, der für Tarife innerhalb des Tarifbereichs gilt.)
Schritt D Ermitteln Sie den höchsten anwendbaren Tarifbereich für die Position des Mitarbeiters nach der Beförderung und ermitteln Sie den niedrigsten Tarifsatz in diesem Bereich, der dem in Schritt C ermittelten Tarif entspricht oder diesen überschreitet. Dies ist der zahlbare Grundgehaltssatz des Mitarbeiters bei Beförderung. (Wenn der in Schritt C ermittelte Satz das Maximum des in diesem Schritt identifizierten Satzbereichs überschreitet, ist der zu zahlende Satz des Arbeitnehmers dieser Höchstsatz oder, wenn der bestehende Satz des Arbeitnehmers höher als dieser Höchstsatz ist, ein einbehaltener Satz unter 5 CFR-Teil 536 gleich dem bestehenden Tarif.)

(ii) Beispiel einer Standardmethode: Ein Mitarbeiter von GS-11, Schritt 5, in Los Angeles wird auf eine GS-12-Position in Kansas City befördert. In Kansas City würde ein spezieller Tarifplan für die GS-11-Position des Mitarbeiters gelten, aber bei GS-12 gilt stattdessen keine spezielle Tarifspanne, sondern nur eine lokale Tarifspanne. Daher gelten für den Mitarbeiter in Kansas City vor und nach der Beförderung unterschiedliche Gehaltspläne. Die Agentur stellt fest, dass die Standardmethode einen höheren Tarif als die alternative Methode liefert, weil der Arbeitnehmer vor der Beförderung, aber nicht nach der Beförderung unter einen speziellen Tarifplan fällt )(iii). Die Agentur wendet die Standardmethode wie folgt an:

Schritt A Wenden Sie die geografische Umrechnungsregel an, um die Grundgehaltssätze für die Position GS-11, Schritt 5, in Kansas City zu bestimmen. Die für den Mitarbeiter in Kansas City geltenden Gehaltstabellen sind der Allgemeine Tarif, der in Kansas City geltende Ortstarif und der für die Position des Mitarbeiters in Kansas City geltende Sondertarif.
Schritt B Unter Verwendung des zugrunde liegenden allgemeinen Zeitplans, erhöhen Sie die GS-11, Stufe 5, Rate um zwei Erhöhungen innerhalb der Besoldungsgruppe, was die GS-11, Stufe 7, Rate ergibt.
Schritt C Der zu zahlende (höchste) Grundgehaltssatz für GS-11, Stufe 7, ist der entsprechende GS-11, Stufe 7, Sondersatz, der für die GS-11-Stelle in Kansas City gelten würde.
Schritt D Die höchste anwendbare Tarifspanne für die GS-12-Position nach der Beförderung ist die GS-12-Lokalitätstarifspanne gemäß dem Tarifplan für die Lokalität von Kansas City. Finden Sie den niedrigsten Stufensatz in diesem Bereich, der dem Sondersatz von GS-11, Stufe 7, aus Stufe C entspricht oder diesen überschreitet. Dieser Stufensatz ist der zahlbare Grundgehaltssatz bei Beförderung.

(i) Die alternative Methode zur Anwendung der Beförderungsregel, die die Verwendung von vor der Beförderung geltenden Gehaltsplänen und die anschließende Umwandlung des Gehalts in einen anderen nach der Beförderung geltenden Tarif beinhaltet, ist in der folgenden Tabelle dargestellt:

Aktionsregel – Alternative Methode
Schritte A, B, C Entspricht der Standardmethode in Absatz (d)(3) dieses Abschnitts.
Schritt D Identifizieren Sie den höchsten anwendbaren Tarifbereich für die Besoldungsgruppe des Mitarbeiters nach der Beförderung, basierend auf der Berücksichtigung aller Gehaltspläne, die für die Position des Mitarbeiters vor der Beförderung (nach einer geografischen Konvertierung) galten. (Berücksichtigen Sie keine Gehaltspläne, die nur für die neue Position des Mitarbeiters nach der Beförderung gelten. Wenn beispielsweise ein bestimmter Sondertarif nur für die Position eines Mitarbeiters nach der Beförderung gilt, ignorieren Sie diesen Zeitplan bei der Anwendung dieses Schritts.) niedrigste Stufe in der höchsten anwendbaren Tarifspanne, die dem in Schritt C ermittelten Tarif entspricht oder diesen überschreitet. wenn der bestehende Satz des Arbeitnehmers höher als dieser Höchstsatz ist, ein einbehaltener Satz unter 5 CFR part 536, der diesem bestehenden Satz entspricht.)
Schritt E Convert the lowest step rate identified in step D to a corresponding step rate (same step) in the highest applicable rate range for the employee's new position of record after promotion. This is the employee's alternate payable rate of basic pay upon promotion. (If the rate derived under step D was a retained rate, determine the alternate payable rate of basic pay as provided in paragraph (d)(4)(ii) of this section.)
Step F If the alternate payable rate identified in step E exceeds the payable rate resulting from the standard method in paragraph (d)(3) of this section, the employee is entitled to the alternate rate upon promotion. Otherwise, the employee is entitled to the payable rate derived under the standard method, except as provided in paragraph (d)(2)(iii) of this section.

(ii) In applying step E of the table in paragraph (d)(4)(i) of this section, if the rate derived under step D was a retained rate, compare the retained rate to the highest applicable rate range identified in step E. If the retained rate exceeds the maximum of that rate range, the retained rate continues and is the employee's alternate payable rate upon promotion. If the retained rate is below the rate range maximum, the employee's alternate payable rate upon promotion is the maximum rate of the range (step 10).

(iii) Example of alternate method: A GS-7, step 7, employee in Atlanta is promoted to a GS-9 position in Washington, DC. The promotion involves not only a change in grade but also a change in the employee's occupational series. In Washington, DC, no special rate schedule would apply to a GS-7 or GS-9 position in the old occupational series, but a special rate schedule does apply to the GS-9 position in the new occupational series. Thus, different pay schedules apply before and after promotion, and the alternate method would result in a higher rate than the standard method. As provided in paragraph (d)(2)(ii) of this section, the agency must apply the alternate method and compare the result to the result derived under the standard method, as follows:

Step A Apply the geographic conversion rule in § 531.205 to determine the rates of basic pay for the GS-7, step 7, position in Washington, DC. Based on the GS-7 position before promotion (including the old occupational series), the pay schedules applicable to the employee in Washington, DC, would be the General Schedule and the locality rate schedule applicable in Washington, DC.
Step B Using the underlying General Schedule, increase the GS-7, step 7, rate by two within-grade increases, which produces the GS-7, step 9, rate.
Step C The payable (highest) rate of basic pay for GS-7, step 9, is the corresponding GS-7, step 9, locality rate in Washington, DC.
Step D If the employee were promoted to a GS-9 position in the old occupational series, the highest applicable rate range for that GS-9 position after promotion would be the GS-9 locality rate range in Washington, DC. The GS-9, step 3, locality rate is the lowest step rate in that range that equals or exceeds the GS-7, step 9, locality rate from step C.
Step E Convert the GS-9, step 3, locality rate to the higher GS-9, step 3, special rate that applies to the employee's position after promotion (including the new occupational series). That GS-9, step 3, special rate is the payable rate of basic pay upon promotion.
Step F Assume that the standard method would have compared the GS-7, step 9, locality rate directly to the higher GS-9 range of special rates and produced a rate of GS-9, step 1. Since the rate produced by the alternate method (GS-9, step 3) is greater than the rate produced by the standard method, the result of the alternate method is used.

(5) If employee was receiving a retained rate before promotion.

(i) If an employee's existing payable rate of basic pay before promotion is a retained rate, apply the applicable promotion methods in paragraphs (d)(3) or (d)(4) of this section as if the employee were receiving the maximum rate of the employee's grade before promotion.

(ii) If the payable rate of basic pay after promotion determined under paragraph (d)(5)(i) of this section is greater than the employee's existing retained rate, the employee is entitled to that payable rate.

(iii) If the existing retained rate is greater than the rate determined under paragraph (d)(5)(i) of this section, the retained rate must be compared to the highest applicable rate range for the position after promotion, as provided in 5 CFR 536.304. The employee is entitled to the lowest step rate in the range that equals or exceeds the retained rate or, if the retained rate exceeds the range maximum, to the retained rate.

(6) If employee is promoted from GS-1 or GS-2. In applying the promotion rule to an employee who is promoted from step 9 or 10 of grade GS-1 or GS-2, the value of two within-grade increases is determined by doubling the within-grade increase between step 9 and 10 for the applicable grade.

(e) Temporary promotions. Pay is set for an employee receiving a temporary promotion on the same basis as a permanent promotion. Upon expiration or termination of the temporary promotion, pay is set as provided in § 531.215(c). If a temporary promotion is made permanent immediately after the temporary promotion ends, the agency may not return the employee to the lower grade instead, the agency must convert the employee's temporary promotion to a permanent promotion without a change in pay.

(f) Corrections of demotions. The promotion rule in this section may not be used in correcting an erroneous demotion. (See § 531.215(e).)


In your App Builder Field Settings, expand More Field Settings to customize these properties.

Accuracy (m) Option

Accuracy (m) allows you to specify how accurate the GPS location must be in meters for the location. When acquiring a location from satellites, the first points reported by the hardware can often be inaccurate.

By choosing a focus on accuracy, GoCanvas will reject any reported location coordinates until the desired accuracy is met or until the timeout expires.

Timeout (ms) Option

Timeout (ms) allows you to decide the maximum amount of time, in milliseconds, to wait for location coordinates. If it takes to long, and accuracy hasn't been met, the location will be reported.

You can change this by turning on the force accuracy option (see below).

Force Accuracy Option

If you choose Force Accuracy, if the mobile app doesn't get the accurate location before timing out, no location will be captured.


Schau das Video: Meget let.. hvordan man konverterer ordet kat til at tegne en kat. lær at tegne