Lagi

Bagaimana cara mengubah posisi layar ke koordinat geografis?


Saya mencari sumber daya yang menjelaskan bagaimana saya harus mengonversi koordinat layar (titik yang saya pilih di layar) ke koordinat geografis (lat/lon).

Saya ingin membangun aplikasi di mana, versi yang disederhanakan, saya dapat memilih titik dari peta di layar dan koordinat geografis diteruskan ke database saya. Saya memiliki layanan ubin yang menyajikan ubin raster dari file .MBTILES, yang dihasilkan dari data OSM yang disimpan dalam database Postgres. Klien kemungkinan akan dibangun dengan .NET, kemungkinan MVC untuk aplikasi web atau WPF untuk aplikasi desktop Windows.

Saya mencari konsep sehingga saya dapat melakukan penelitian tambahan sendiri untuk mengetahui apa yang perlu saya lakukan selanjutnya. Apa praktik terbaik untuk melakukan ini?


Pertama, ini membantu untuk mengetahui apa yang Anda lakukan dalam istilah yang umum digunakan. Dalam hal ini adalah proyeksi terbalik atau proyeksi ulang ketika Anda beralih dari koordinat yang diproyeksikan (atau pesawat) "kembali" ke koordinat geografis (atau bola).

Kedua, Anda perlu mengetahui sistem koordinat proyeksi apa yang Anda miliki di layar Anda, untuk menentukan kebalikannya. Tidak terbiasa dengan OSM, dan berdasarkan, sejauh ini, hanya pada proyek show-a-kml-which-uses-longitude-and-latitude-epsg4326-in-google-osm-, OSM menggunakan CRS (sistem referensi koordinat) dikenal sebagai EPSG:3857.

Ketiga, bahwa CRS tidak hanya menentukan metode proyeksi tetapi juga data -- detail ellipsoid yang digunakan untuk mewakili Bumi. Ini membantu untuk memahami bahwa untuk benar melakukan langkah berikutnya. Anda memerlukan koordinat geografis Anda sendiri untuk berada pada datum/ellipsoid yang benar.

Keempat, Anda harus menemukan pustaka/alat perangkat lunak yang ada yang, dengan dua CRS Anda -- diproyeksikan dan tidak diproyeksikan -- dan beberapa koordinat yang diproyeksikan, mengubah (membatalkan proyek) koordinat Anda menjadi lat-long. PostGIS sendiri melakukan sebagian atau menggunakan GDAL/OGR atau lainnya.

Karena banyak alat proyeksi ulang hanya dimulai dari unit pemetaan "dunia nyata" (mis., m atau ft) dan unit awal Anda adalah piksel layar, Anda mungkin memerlukan pra-langkah 4: ubah piksel xy layar Anda menjadi unit XY tanah, berdasarkan skala peta. Itu adalah skalar sederhana.


Menerjemahkan antara koordinat kartesius dan layar

Untuk permainan saya, saya memerlukan fungsi untuk menerjemahkan antara dua sistem koordinat. Yah itu terutama pertanyaan matematika tetapi yang saya butuhkan adalah kode C++ untuk melakukannya dan sedikit penjelasan bagaimana menyelesaikan masalah saya.

c) kanan += x (semakin banyak nilai x, semakin kanan adalah titik)

d) bawah -= y (semakin sedikit y, semakin banyak titik di bawah)

Saya membutuhkan cara mudah untuk menerjemahkan dari satu sistem ke sistem lain dan sebaliknya. Untuk melakukan itu, (saya pikir) saya perlu pengetahuan seperti di mana (0, 0) [sudut kiri atas di koordinat layar] ditempatkan di koordinat kartesius.

Namun ada masalah bahwa untuk beberapa titik dalam koordinat kartesius setelah menerjemahkannya ke layar, posisi dalam koordinat layar mungkin minus, yang merupakan omong kosong. Saya tidak dapat menempatkan sudut kiri atas koordinat layar dalam koordinat kartesius (-inifity, +infinity).

Bagaimana saya bisa memecahkan masalah ini? Satu-satunya solusi yang dapat saya pikirkan adalah menempatkan layar (0, 0) dalam kartesian (0, 0) dan hanya menggunakan seperempat IV dari sistem kartesius, tetapi dalam hal ini menggunakan sistem kartesian tidak ada gunanya.

Saya yakin ada cara untuk menerjemahkan koordinat layar ke koordinat kartesius dan sebaliknya, tetapi saya melakukan sesuatu yang salah dalam pemikiran saya dengan nilai minus itu.


Hindari Terjemahan Koordinat

Anda mungkin dapat menghindari penerjemahan antar sistem koordinat sepenuhnya.

SVG yang disematkan di halaman HTML (bukan gambar atau latar belakang CSS) menjadi bagian dari DOM dan dapat dimanipulasi dengan cara yang mirip dengan elemen lainnya. Misalnya, ambil SVG dasar dengan satu lingkaran:

Anda dapat menerapkan efek CSS untuk ini:

Anda juga dapat melampirkan pengendali acara untuk mengubah atribut:

Contoh berikut menambahkan tiga puluh lingkaran acak ke gambar SVG, menerapkan efek melayang di CSS, dan menggunakan JavaScript untuk meningkatkan radius sebanyak sepuluh unit saat lingkaran diklik.


Pabrik WebGL

Dijelaskan dengan jelas, terima kasih. Bisakah Anda memberikan sintaks javascript yang sesuai?

Ini di sini adalah solusi yang sangat umum, jadi tidak ada sintaks JavaScript yang unik. Data apa (matriks mana dan dalam format apa) yang Anda miliki sebagai input?

Saya memiliki serangkaian koordinat x,y,z sebagai array simpul.
(Misalnya:
0.205811 0.423383 0.403992
0.432068 0.603759 0.630250
1.032178 1.203868 1.230359)
Saya mengalami kesulitan beralih dari 2d ke 3d. Saya mengikuti algoritma ini http://stackoverflow.com/questions/5613718/click-to-zoom-in-webgl yang tampaknya mirip dengan ide yang diuraikan di atas, tetapi koordinat yang saya dapatkan tidak sesuai dengan simpul yang sebenarnya Saya sedang membuat grafik. Adakah saran bagaimana melakukan ini?

Bisakah Anda menjelaskan lebih detail apa yang Anda lakukan - apakah itu 3D -> 2D -> 3D, apakah ada koordinat yang cocok (mis. x dan y, z tidak)?

Saya sedang merencanakan data 3d. Saya ingin dapat mengklik koordinat layar (yang pada dasarnya adalah 2d) dan dari situ mendapatkan titik 3d terdekat yang sesuai. Dalam contoh dibutuhkan 2 nilai arbitrer untuk z: -1 dan 0, kemudian dilakukan pengurangan antara 2 matriks. Tak satu pun dari nilai yang dihasilkan cocok. Mungkin saya salah memahami implementasinya?

Untuk menentukan koordinat Z sedikit lebih rumit - Anda harus memeriksa perpotongan sinar dengan objek/bidang Anda. Namun, koordinat x dan y harus benar. Saya mencoba menjelaskan kodenya sedikit lebih banyak, mungkin Anda menemukan bug:

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

- winX dan winY - koordinat mouse relatif terhadap jendela atau kanvas 3d, bukan seluruh layar atau jendela browser

- clientWidth dan clientHeight sama - ukuran kanvas/3D jendela

Matrix4 viewProjectionInverse =
invers(Matriks proyeksi *
lihatMatriks)
Point3D point3D = Point3D baru(x, y, 0)
kembali viewProjectionInverse.multiply(point3D)

Ini hanya matematika, dengan z = 0 sebagai referensi (Anda masih harus mendapatkan x dan benar). Urutan perkalian ini adalah walikota baris - mungkin Anda menggunakan walikota kolom?

Anda juga dapat memeriksa apa yang akan Anda dapatkan ketika Anda mengubah dari titik 3D yang Anda dapatkan (benar atau tidak) kembali ke 2D.

var dunia1 = [0,0,0,0]
var dunia2 = [0,0,0,0]
var dir = [0,0,0]
var w = event.srcElement.clientWidth
var h = event.srcElement.clientHeight
// menghitung koordinat ruang klip x,y
var x = (event.offsetX-w/2)/(w/2)
var y = -(event.offsetY-h/2)/(h/2)
mat4.inverse(pvMatrix, pvMatrixInverse)
// mengubah koordinat ruang klip menjadi ruang dunia
mat4.multiplyVec4(pvMatrixInverse, [x,y,0,1], dunia1)

layar saya (relatif terhadap kanvas) x, y benar - saya mencoba beberapa cara berbeda untuk mencapai ini dan mendapatkan nilai yang sama setiap kali.
kemudian mengambil kebalikan dari pvmatrix saya, lalu mengalikannya dengan [x,y,0,1] (untuk saat ini, katakanlah semua z saya adalah 0). Maka hasilnya harus di world1. Tetapi ketika saya mengklik 1,1,0 saya tidak mendapatkan hasil yang cocok.

Kode terlihat baik bagi saya - satu-satunya nilai yang tidak diketahui di sini adalah pvMatrix. Saya kira itu harus benar karena Anda sedang merender adegan Anda, tetapi periksa kembali apakah itu memiliki nilai yang benar. Saya akan mencoba (jika Anda belum melakukannya) untuk mengonversi world1 kembali ke ruang layar (apakah Anda mendapatkan nilai event.offSet lagi?). Kalau tidak, matematikanya sama seperti dalam kode saya

Tutorialnya bagus, jelas dan enak dibaca.

Satu-satunya hal kecil yang saya perhatikan, adalah:

Matrix4 viewProjectionInverse = terbalik(projectionMatrix * viewMatrix)

Orde perkalian matriks:

Urutan perkalian harus diubah menjadi:

Thanx untuk tutorial yang bagus.

Hai Ben, terima kasih atas komentarnya, sangat menghargainya! Mengenai urutan matriks: urutan perkalian sebenarnya adalah hal yang konveksi. Bergantung pada apa pun yang Anda tafsirkan poin sebagai vektor kolom atau baris, dan menggunakan mode baris atau kolom utama, urutannya dapat berubah. Dalam kasus khusus ini di sini saya mengasumsikan titik-titik tersebut sebagai vektor baris dan matriks baris utama (misalnya komponen translasi dalam indeks matriks 12, 13 dan 14). Tuliskan di selembar kertas proyeksi titik operasi*pandangan dunia*dalam notasi matematika dan Anda akan mengerti maksud saya.

P.S. Lagi pula saya berencana untuk memiliki satu atau dua posting tentang transformasi secara detail, terima kasih telah mengingatkan saya :)

Tutorial yang bagus Denis! Beberapa poin:

1) Dapatkah Anda menjelaskan apa yang sebenarnya Anda lakukan saat melakukan konversi 3D ke 2D. Kode baik-baik saja tetapi bagi saya itu memberikan sedikit kesalahan offset, jadi untuk memperbaikinya saya perlu memahami apa yang coba dilakukan kode.

2) tautan tutorial memetik mouse tidak berfungsi.

Hy Amit, maaf untuk tautan yang rusak - Saya akan mencoba mencari pengganti yang baik untuk itu (ada beberapa pdf di internet tempat saya pertama kali melihat perhitungan ini beberapa tahun yang lalu, dan sekarang tidak ingat lagi bagaimana namanya) .

Perhatikan konversi 3D->2D. seluruh proses dapat dibagi menjadi beberapa langkah sederhana, dengan asumsi bahwa kita memiliki titik 3D dalam koordinat "absolut". Pertama, kami mencoba memindahkan 3D itu ke ruang kamera relatif dengan mengalikannya dengan matriks tampilan. Setelah itu produk dikalikan dengan matriks proyeksi untuk mendapatkan titik menjadi koordinat kliping.

Karena proyeksi dan matriks tampilan diketahui di awal, saya mengalikannya terlebih dahulu dan kemudian matriks hasil dengan titik (tidak perlu untuk satu titik, tetapi bayangkan Anda memiliki 50.000 poin untuk dikonversi karena alasan apa pun).

Setelah langkah-langkah ini dilakukan, kita mendapatkan titik dalam ruang koordinat yang dinormalisasi ([-1,1], [-1,1]). Kami mengubah titik 2D ini menjadi domain ([0,1], [0,1]). Sekarang, mengalikannya dengan lebar/tinggi jendela kita akan mendapatkan koordinat piksel layar.

Kesalahan kecil harus diharapkan (terutama karena pembulatan ketika mendapatkan koordinat yang dinormalisasi). Anda dapat mencoba menentukan fungsi putaran dengan lebih baik - mungkin menggunakan ini di sini
http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm

"Setelah langkah-langkah ini selesai, kita mendapatkan titik dalam ruang koordinat ternormalisasi ([-1,1], [-1,1])". Bagaimana?

Saya melakukannya dengan menyelam koordinat kliping x,y,z dengan memotong koordinat W. (yang mewakili faktor skala pemandangan).

Apakah Anda melewatkan langkah ini atau tidak benar-benar diperlukan?

Secara teori harus dipertimbangkan dan pembagian harus dilakukan. Dalam hal ini meskipun saya berasumsi bahwa koordinat w adalah 1 dan konsisten di seluruh data (oleh karena itu tidak ada pembagian, saya harus menunjukkan ini di pos).

Periksa dua tautan ini di sini, mungkin membantu:

Ngomong-ngomong, apa sebenarnya masalah yang Anda alami?

Saya sedang mengerjakan prototipe yang mengharuskan saya melakukan pemetikan dan transformasi 3D->2D. Saya telah melakukan keduanya tetapi mencari tahu melakukan normalisasi membutuhkan waktu yang signifikan. Saya pikir itu akan menjadi ide yang baik jika Anda menjelaskan langkah normalisasi di pos.

Saya juga mengambil W=1 di tempat pertama tetapi setelah mengalikan [x,y,z,W] dengan matriks tampilan dan matriks proyeksi, W menjadi >1 dan itulah mengapa ada kebutuhan yang ketat bagi saya untuk membagi x,y dengan W.

Saya membaca fungsi konversi get3dPoint tetapi saya tidak mengerti cara menggunakannya. Misal saya punya gambar titik dengan koordinat (x,y) masing-masing (2.3) bagaimana cara mencari Point3D (x,y,z).

Hai Denis,
Terima kasih banyak untuk tutorialnya. Saya ingin tahu apakah Anda memiliki waktu luang untuk membantu saya menyelesaikan ini. Saya telah membuat contoh dalam javascript, tetapi saya mengalami sedikit masalah dalam mengonversi kembali dari titik 3d ke xy. Dengan kata lain menerapkan viewProjectionMatrix kembali pada titik 3d untuk mendapatkan koordinasi layar yang dinormalisasi.

//dimulai dengan koordinat layar yang dinomalkan:
layar3D[0] = 0,5
layar3D[1] = 0,5
layar3D[2] = 0
layar3D[3] = 1

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

//terapkan matriks tampilan proyeksi terbalik membawa kita ke ruang dunia
var worldM = Matrix.multTranslate(invProjectionViewMatrix,screen3D)

//Saya dapat menggandakan worldM matix ini dengan viewProjectionMatrix sekarang untuk kembali ke koordinat layar saya yang dinormalisasi.

var normScreenM = Matrix.multTranslate(projectionViewMatrix,worldM)

//Namun mengambil koordinat worldPoint.
var worldPoint = Matrix.getTrans(worldM)
//. dan mengalikan proyeksiViewMatrix tidak berhasil
var normScreenM2 = Matrix.multTranslate(projectionViewMatrix,worldPoint)

Jadi, saya tidak mendapatkan koordinat layar yang dinormalisasi dari produk (worldPoint * proyeksiViewMatrix). Saya hanya bisa mendapatkannya kembali jika saya memiliki matriks lengkap untuk dikalikan (worldM * proyeksiViewMatrix).
Saya mencoba menerapkan ops terbalik sebagai pemeriksaan kewarasan, pastikan semuanya diperiksa. Sayangnya ada sesuatu yang saya lewatkan. Saya tidak dapat kembali ke koordinasi layar normal saya multing dengan worldPoint Jadi saya akan sangat menghargai jika Anda memiliki waktu/gagasan tentang apa yang salah untuk membantu saya menyelesaikan brain banana ini.

tampilan yang jelas dan nyata yang disediakan oleh perangkat tampilan terbaru membuat pengalaman kami menjadi nyata. sistem tampilan bisa dibuat lebih hidup dengan pendukung yang tepat.. untuk gorden rumah cantik dan masih banyak lagi bisa anda kunjungi..
Perusahaan layar proyeksi
Tirai Teater"

Artikel yang sangat membantu, terima kasih! :) Saya sebenarnya menulis artikel serupa untuk melakukan konversi yang sama, tetapi saya secara khusus bekerja di Maya. Untuk orang yang mengalami masalah dengan bagian normalisasi, mungkin Anda akan menemukan ini berguna: http://www.gouvatsos.com/how-to-transform-3d-coordinates-to-2d-screenspace-and-vice-versa

Jika asal layar berada di pojok kiri bawah, bukan kiri atas, apa yang perlu Anda ubah untuk mengonversi dari 2d->3d?

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

(2) ganda y = 2.0 * winY / clientHeight - 1
Jadi, Anda harus menggunakan pendekatan yang sama dengan sumbu x.

Selain itu, Anda akan mendapatkan hasil yang sama jika Anda mengganti "winY" dengan "clientHeight - winY" di (1).

Bukankah seharusnya Anda membagi dengan z untuk mendapatkan koordinat layar?

Saya melakukan ini menggunakan glm, dan sepertinya berhasil (kode aktual):

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)
kembali s
>

Juga, Anda dapat mengekstrak z-coord dari z-buffer, seperti

GLfloat zbuf
getPixelInfo(x,y, GL_COLOR_ATTACHMENT0, GL_DEPTH_COMPONENT, GL_FLOAT, &zbuf)
znorm ganda = 2.0 * zbuf - 1.0
double zreal = 2.0 * clipNear * clipFar / (clipFar + clipNear - znorm * (clipFar - clipNear))

Saya menghabiskan beberapa jam terakhir mencoba men-debug kode saya dan membaca banyak solusi yang mengatakan untuk membagi dengan w, tetapi itu tidak membantu. Akhirnya saya menemukan komentar Anda dan dibagi dengan z (selain w, jika itu melakukan sesuatu yang berguna) dan itu benar-benar memperbaiki masalah saya! Saya juga mengecualikan label rendering (kasus penggunaan saya untuk kode ini) ketika z < 0.0 (yaitu di belakang kamera), serta kasus yang merosot ketika w = 0. Terima kasih telah memposting komentar ini! Hormat kami, Masa Depan.

Silakan merujuk ke http://trac.bookofhook.com/bookofhook/trac.cgi/wiki/MousePicking untuk penjelasan rinci tentang bagaimana x dan y dihitung tanpa perlunya z.

Adapun glm, ini adalah pendekatan pengkodean umum yang ditulis dengan mempertimbangkan WebGL, tanpa menggunakan pustaka khusus apa pun.

Saya punya masalah: Saya tidak dapat menemukan algoritma atau program yang menjelaskan bagaimana melakukan konversi titik 2D ke 3D
bagaimana saya menemukan Z
titik(x,y) --> titik(x,y,z)
tolong bantu aku

Saya akhirnya mengetahuinya. Masalahnya adalah ketika Anda mengatur kamera Z ke nilai tertentu (dalam artikel 0), maka dunia X dan Y benar-benar menghitung agar sesuai dengan Z itu, Jadi ketika Anda ingin menghitung koordinat dunia X,Y, Anda harus tahu dunia Z mana Anda menemukan ini X a Y. Setelah Anda tahu itu. Anda dapat menghitung koordinat kamera Z yang akhirnya dapat Anda gunakan untuk menghitung dunia X,Y seperti yang dijelaskan dalam artikel. Jadi bagaimana Anda menemukan cameraZ ketika Anda tahu worldZ? Anda harus mengambil Pesawat yang berisi koordinat worldZ dan memiliki normal identik dengan vektor arah pandang (itu adalah target - eyeCoor) Setelah Anda memiliki pesawat itu, Anda harus mengubahnya menjadi ruang kamera (Misalnya dengan mengambil tiga titik yang dikandung pesawat itu) , mengubahnya dan kemudian membuatnya lagi). Dan dengan menempatkan kamera X,Y ke bidang equatian Anda mendapatkan kamera Z. Dan hanya itu!

Apa yang dimaksud dengan clientWidth, clinetHeight, winX, winY dalam fungsi konversi 2d ke 3d? tolong bantu.

Gambar yang Anda tuju (100, 200) pada permukaan redering 2D berukuran 640x480.

lebar klien == 640
clinetHeight == 480
winX == 100
menang == 200

saya memiliki 4 2dlocator (animasi yang dipanggang) dari rotasi dan gerakan geometri bidang sederhana.
saya butuh:
apakah di sini ada perintah skrip mel sederhana untuk mengonversi 4 2dlocator saya menjadi 1 3d locator di tengah 4 2dlocator.created 3d locator dengan skala, transformasi x,y, dan xyz rotasi.
apakah ini mungkin di maya saya memerlukan metode ini untuk menempatkan polyplane saya di video adegan 3d saya. dengan gerakan skala rotasi dalam 3d tetapi di depan lapisan video yang diproyeksikan tidak perlu gerakan z perlu dicocokkan dengan ruang layar yang sama dengan output video render.
ada ide tautan apa pun metode apa pun skrip apa pun perangkat lunak apa pun yang melakukan ini
tolong bantu aku

Saya sedang mengerjakan pemindai 3d. Saya tidak mengerti bagaimana mengubah koordinat piksel menjadi koordinat dunia nyata.

Misalnya saya memiliki kumpulan data yang hanya berisi koordinat (x,y) dari beberapa titik pada objek dalam bentuk piksel, bagaimana saya bisa mengubahnya menjadi unit dunia nyata (yaitu, cm atau mm)?

Apa itu winx dan winy dalam fungsi di bawah ini? Apakah itu hanya lebar dan tinggi layar?

fungsi Point3D get3dPoint(Point2D point2D, int lebar,
int tinggi, Matriks tampilanMatrix, Matriks proyeksiMatrix) <

ganda x = 2.0 * winX / clientWidth - 1
double y = - 2.0 * winY / clientHeight + 1
Matrix4 viewProjectionInverse = terbalik(projectionMatrix *
lihatMatriks)

Point3D point3D = Point3D baru(x, y, 0)
kembali viewProjectionInverse.multiply(point3D)
>

Manfaatkan kontrol di jendela pengontrol untuk sepenuhnya mengubah format smash Gerakan. Klien dapat mengubah jumlah, berat, gravitasi, ketebalan, dan efek benturan keras untuk membuat tampilan keren yang abadi. Efek Gerakan 5


Gunakan derajat sudut visual untuk mengatur ukuran dan lokasi stimulus. Ini, tentu saja, tergantung pada jarak duduk peserta dari layar serta layar itu sendiri, jadi pastikan bahwa ini terkontrol, dan ingat untuk mengubah pengaturan di Pusat Monitor jika jarak pandang berubah.

Frekuensi spasial: siklus per derajat

Membutuhkan : informasi tentang lebar layar dalam cm dan piksel dan jarak pandang dalam cm

Sebenarnya ada tiga varian: 'deg', 'degFlat', dan 'degFlatPos'

'derajat' : Kebanyakan orang yang menggunakan derajat sudut visual memilih untuk membuat asumsi bahwa derajat sudut visual mencakup jumlah piksel yang sama di semua bagian layar. Ini sebenarnya tidak berlaku untuk layar datar standar - tingkat sudut visual di tepi layar mencakup lebih banyak piksel karena lebih jauh dari mata. Untuk eksentrisitas sedang, kesalahannya kecil (kesalahan 0,2% dalam perhitungan ukuran pada eksentrisitas 3 derajat) tetapi tumbuh saat rangsangan ditempatkan lebih jauh dari pusat layar (kesalahan 2% pada 10 derajat). Untuk sebagian besar studi, bentuk perhitungan ini lebih disukai, karena tidak menghasilkan tampilan rangsangan visual yang melengkung, tetapi jika Anda membutuhkan presisi yang lebih tinggi pada eksentrisitas jauh, pilih salah satu alternatif di bawah ini.

'degFlatPos' : Ini menjelaskan layar datar dalam menghitung koordinat posisi rangsangan visual tetapi membiarkan ukuran dan frekuensi spasial tidak dikoreksi. Ini berarti bahwa kisi-kisi rangsangan visual yang ditempatkan secara merata akan tampak melengkung pada posisinya tetapi akan

'degFlat': Ini mengoreksi perhitungan derajat kerataan layar untuk setiap titik rangsangan Anda. Oleh karena itu, rangsangan persegi di pinggiran akan menjadi lebih terpisah tetapi mereka juga akan menjadi lebih besar dan rhomboid dalam piksel yang mereka tempati.


Isi

Koordinat lokasi disediakan menggunakan dua set angka pada sistem koordinat Cartesian sederhana. Dengan cara ini, lokasi dapat ditemukan menggunakan arah timur/utara (atau x,kamu) berpasangan. Sebagai konvensi, pasangan biasanya diwakili timur pertama, utara kedua.

Misalnya, puncak Gunung Assiniboine (pada 50°52′10″LU 115°39′03″W  /  50.86944°LU 115.65083°W  / 50.86944 -115.65083 ) di UTM Zona 11 adalah diwakili oleh 11U 594934 5636174 . Konvensi lain juga dapat digunakan, seperti referensi kisi terpotong, [2] yang akan mempersingkat koordinat contoh menjadi 949-361 .

Timur palsu

Nilai linier ditambahkan ke semua koordinat x dari proyeksi peta sehingga tidak ada nilai di wilayah geografis yang dipetakan yang negatif. Titik asal setiap zona UTM adalah perpotongan garis khatulistiwa dan meridian pusat setiap zona. Untuk menghindari berurusan dengan angka negatif, meridian pusat setiap zona ditetapkan pada 500.000 meter Timur.

Arah utara yang salah

Nilai linier ditambahkan ke semua koordinat y dari proyeksi peta sehingga tidak ada nilai di wilayah geografis yang dipetakan yang negatif. utara di khatulistiwa ditetapkan pada 10.000.000 meter sehingga tidak ada titik yang memiliki nilai negatif.


Memperbarui

Saya memperbarui metode ConvertToCartesian, sehingga dibutuhkan True Anomaly (nu) yang dihitung dari fungsi ConvertToKeplerElements sebagai input. Kemudian menghitung Anomali Eksentrik (E), kemudian menghitung Anomali Mean (Mt) dari itu. Ketika ConvertToCartesian dipanggil dalam loop berikutnya, Mt diperbarui dengan langkah waktu yang relevan. Kemudian saya menghitung E lagi dari Mt yang diperbarui, lalu menghitung nu dari E yang diperbarui. Ini menyelesaikan sebagian besar kasus. Masalahnya, terkadang nu dihitung 180 derajat dari yang seharusnya, membuat titik awal dari orbit yang ditampilkan berubah 180 derajat.

Dalam fungsi ConvertToKeplerElements saya, menurut matematika, nu = 2pi - nu if r.v < 0. Ini terjadi, misalnya, ketika saya mengatur vektor r, v awal sedemikian rupa sehingga kapal tidak mulai pada periapsis atau apoapsis tetapi di antara keduanya. Saya tahu bahwa ini benar, tetapi ketika saya menghitung nu->E->nu, flip 180 derajat itu hilang dalam perhitungan.

Inilah bagian yang relevan dari metode yang diperbarui ConvertToCartesian.

Inilah hasil buruk yang saya dapatkan:


Sudah memiliki akun? Masuk di sini.

Tom Allensworth,
Pendiri AVSIM Online

AVSIM adalah layanan gratis untuk komunitas simulasi penerbangan. AVSIM dikelola sepenuhnya oleh sukarelawan dan semua dana yang disumbangkan ke AVSIM langsung kembali untuk mendukung komunitas. Donasi Anda di sini membantu membayar biaya bandwidth, dana darurat, dan biaya umum lainnya yang muncul dari waktu ke waktu. Terima kasih atas dukungan Anda!

Tujuan Donasi

Donasi untuk tujuan penggalangan dana umum tahunan kami. Donasi ini membuat pintu kami tetap terbuka dan memberi Anda layanan 24 x 7 x 365. Donasi Anda di sini membantu membayar biaya bandwidth kami, dana darurat, dan biaya umum lainnya yang muncul dari waktu ke waktu. Kami mengatur ulang tujuan ini setiap tahun baru untuk tujuan tahun berikutnya.


5 CFR 531.214 - Menetapkan pembayaran saat promosi.

(a) Umum. Agensi harus menetapkan tarif gaji pokok yang harus dibayar karyawan pada saat promosi mengikuti aturan di bagian ini, sesuai dengan 5 U.S.C. 5334 (b). Aturan promosi di 5 U.S.C. 5334(b) dan aturan pelaksanaan di bagian ini hanya berlaku untuk karyawan GS yang dipromosikan dari satu tingkat GS ke tingkat GS yang lebih tinggi. Konsisten dengan § 531.206, setiap penyesuaian gaji umum yang berlaku pada hari yang sama dengan tindakan promosi harus diproses sebelum menerapkan aturan di bagian ini.

(b) Konversi geografis. Ketika tempat kerja resmi karyawan diubah ke lokasi baru di mana berlaku jadwal pembayaran yang berbeda, agen harus mengubah karyawan tersebut ke jadwal pembayaran yang berlaku dan tarif gaji pokok untuk tempat kerja resmi baru berdasarkan posisi karyawan di tempat kerja. rekam sebelum promosi sebagaimana diatur dalam 531.205 sebelum memproses tindakan promosi simultan.

(c) Peningkatan dalam kelas secara bersamaan. Ketika seorang karyawan berhak atas kenaikan kelas atau peningkatan langkah kualitas yang efektif pada saat yang sama dengan promosi, agensi harus memproses kenaikan itu sebelum memproses tindakan promosi.

(1. Umum. Agensi harus menentukan tarif gaji pokok yang harus dibayar karyawan pada saat promosi dengan menggunakan metode standar dalam paragraf (d)(3) bagian ini atau metode alternatif dalam paragraf (d)(4) bagian ini, dengan tunduk pada aturan khusus dalam paragraf (d)(5) bagian ini untuk karyawan yang menerima tarif ditahan sebelum promosi. Penentuan mengenai apakah metode alternatif digunakan sebagai pengganti metode standar bergantung pada jadwal pembayaran yang berlaku bagi seorang karyawan sebelum dan sesudah promosi, sebagaimana diatur dalam paragraf (d)(2) bagian ini. Dalam paragraf (d) ini, referensi ke tarif atau rentang karyawan "sebelum promosi" berarti tarif atau rentang sebelum promosi tetapi setelah konversi geografis apa pun yang disyaratkan oleh paragraf (b) bagian ini.

(2) Menentukan metode yang berlaku. Aturan berikut mengatur penentuan mengenai metode promosi yang akan digunakan:

(i) Terapkan metode standar secara eksklusif jika karyawan dicakup oleh jadwal pembayaran yang sama sebelum dan sesudah promosi. Misalnya, seorang karyawan mungkin dicakup oleh Jadwal Umum dan jadwal tarif lokal yang sama sebelum dan sesudah promosi.

(ii) Terapkan metode alternatif jika karyawan dicakup oleh jadwal pembayaran yang berbeda sebelum dan sesudah promosi dan jika metode alternatif akan menghasilkan tingkat pembayaran yang lebih tinggi pada saat promosi daripada metode standar. Misalnya, seorang karyawan mungkin dilindungi setelah promosi dengan jadwal tarif khusus yang tidak berlaku untuknya sebelum promosi, dan metode alternatif akan menghasilkan tarif yang lebih tinggi.

(iii) Menerapkan metode standar dalam semua keadaan lain, kecuali bahwa agen dapat, atas kebijakannya sendiri dan eksklusif, menerapkan metode alternatif untuk karyawan yang dicakup oleh jadwal pembayaran yang berbeda sebelum dan sesudah promosi meskipun metode tersebut menghasilkan tingkat pembayaran yang lebih rendah daripada metode standar, tetapi hanya dalam kondisi berikut:

(A) Agensi memutuskan bahwa tidak pantas untuk menggunakan metode standar berdasarkan temuan bahwa gaji yang lebih tinggi untuk posisi sebelum promosi tidak cukup terkait dengan pengetahuan dan keterampilan yang dibutuhkan untuk posisi tersebut setelah promosi dan

(B) Agensi memberi tahu karyawan tentang tekad untuk menggunakan metode alternatif sebelum tanggal efektif promosi.

(i) Metode standar penerapan aturan promosi disajikan dalam tabel berikut:

Aturan Promosi - Metode Standar
Langkah A Jika berlaku, terapkan aturan konversi geografis di 531.205 untuk menentukan tarif dan kisaran gaji pokok karyawan berdasarkan catatan posisi karyawan sebelum promosi dan tempat kerja resmi yang baru, sebagaimana disyaratkan oleh paragraf (b) dari bagian ini. Juga, jika berlaku, berikan peningkatan dalam kelas atau peningkatan kualitas secara simultan, seperti yang disyaratkan oleh paragraf (c) bagian ini. Gunakan tarif gaji pokok yang dihasilkan sebagai tarif yang berlaku segera sebelum promosi dalam menerapkan langkah B dan C.
Langkah B Identifikasi tarif GS karyawan yang ada (atau tarif dasar khusus LEO) di kelas sebelum promosi, dan tingkatkan tarif tersebut dengan dua kenaikan GS dalam kelas untuk kelas tersebut.
Langkah C Tentukan tarif pembayaran dasar (tertinggi) untuk langkah atau tarif yang ditentukan pada langkah B dengan menerapkan pembayaran lokal atau suplemen tarif khusus yang berlaku untuk nilai yang diberikan, berdasarkan catatan posisi karyawan sebelum promosi dan tempat kerja resmi setelah promosi. (Jika tarif yang ditentukan pada langkah B di atas kisaran maksimum, gunakan pembayaran lokal yang sama atau suplemen tarif khusus yang berlaku untuk tarif dalam kisaran tarif.)
Langkah D Identifikasi kisaran tarif tertinggi yang berlaku untuk posisi catatan karyawan setelah promosi dan temukan tarif langkah terendah dalam kisaran tersebut yang sama atau melebihi tarif yang ditentukan pada langkah C. Ini adalah tarif gaji pokok yang harus dibayarkan karyawan pada saat promosi. (Jika tarif yang diidentifikasi pada langkah C melebihi maksimum kisaran tarif yang diidentifikasi dalam langkah ini, tarif yang harus dibayar karyawan adalah tarif maksimum tersebut, atau, jika tarif karyawan yang ada lebih tinggi dari tarif maksimum tersebut, tarif yang dipertahankan di bawah 5 bagian CFR 536 sama dengan tarif yang ada.)

(ii) Contoh metode standar: A GS-11, langkah 5, karyawan di Los Angeles dipromosikan ke posisi GS-12 di Kansas City. Di Kansas City, jadwal tarif khusus akan berlaku untuk posisi GS-11 karyawan, tetapi di GS-12 tidak ada kisaran tarif khusus yang berlaku, hanya kisaran tarif lokal yang berlaku. Dengan demikian, jadwal pembayaran yang berbeda berlaku untuk karyawan di Kansas City sebelum dan sesudah promosi. Agensi menentukan bahwa metode standar menghasilkan tarif yang lebih tinggi daripada metode alternatif karena karyawan dicakup oleh jadwal tarif khusus sebelum promosi tetapi tidak setelah promosi, Agensi juga menentukan bahwa ia tidak akan meminta ketentuan pengecualian berdasarkan paragraf (d)(2 )(aku aku aku). Badan tersebut menerapkan metode standar sebagai berikut:

Langkah A Terapkan aturan konversi geografis untuk menentukan tarif gaji pokok untuk posisi GS-11, langkah 5, di Kansas City. Jadwal pembayaran yang berlaku untuk karyawan di Kansas City adalah Jadwal Umum, jadwal tarif lokal yang berlaku di Kansas City, dan jadwal tarif khusus yang berlaku untuk posisi karyawan di Kansas City.
Langkah B Menggunakan Jadwal Umum yang mendasarinya, tingkatkan GS-11, langkah 5, tingkat dengan dua peningkatan dalam-kelas, yang menghasilkan tingkat GS-11, langkah 7,.
Langkah C Tarif pembayaran dasar (tertinggi) yang harus dibayar untuk GS-11, langkah 7, adalah tarif khusus GS-11, langkah 7, yang sesuai yang akan berlaku untuk posisi GS-11 di Kansas City.
Langkah D Kisaran tarif tertinggi yang berlaku untuk posisi GS-12 setelah promosi adalah kisaran tarif lokalitas GS-12 di bawah jadwal tarif lokalitas Kansas City. Temukan tarif langkah terendah dalam kisaran yang sama atau melebihi GS-11, langkah 7, tarif khusus dari langkah C. Tarif langkah tersebut adalah tarif pembayaran dasar yang harus dibayar pada saat promosi.

(i) Metode alternatif untuk menerapkan aturan promosi, yang melibatkan penggunaan jadwal pembayaran yang berlaku sebelum promosi dan kemudian mengonversi pembayaran ke jadwal lain yang berlaku setelah promosi, disajikan dalam tabel berikut:

Aturan Promosi - Metode Alternatif
Langkah A, B, C Sama seperti metode standar dalam paragraf (d)(3) bagian ini.
Langkah D Identifikasi kisaran tarif tertinggi yang berlaku untuk nilai karyawan setelah promosi berdasarkan pertimbangan jadwal pembayaran apa pun yang diterapkan pada catatan posisi karyawan sebelum promosi (setelah konversi geografis apa pun). (Jangan mempertimbangkan jadwal pembayaran yang hanya berlaku untuk posisi tercatat baru karyawan setelah promosi. Misalnya, jika jadwal tarif khusus tertentu hanya berlaku untuk posisi tercatat karyawan setelah promosi, abaikan jadwal itu dalam menerapkan langkah ini.) Temukan langkah terendah dalam kisaran tarif tertinggi yang berlaku yang sama atau melebihi tarif yang diidentifikasi dalam langkah C. (Jika tarif yang diidentifikasi dalam langkah C melebihi kisaran tarif maksimum yang diidentifikasi dalam langkah ini, tarif yang harus dibayar karyawan adalah tarif maksimum tersebut, atau, jika tarif karyawan yang ada lebih tinggi dari tarif maksimum itu, tarif yang dipertahankan di bawah 5 CFR bagian 536 sama dengan tarif yang ada.)
Langkah E Ubah tingkat langkah terendah yang diidentifikasi di langkah D ke tingkat langkah yang sesuai (langkah yang sama) dalam kisaran tingkat tertinggi yang berlaku untuk posisi baru karyawan yang tercatat setelah promosi. 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.