Daha çox

ArcPy / Python istifadə edərək istənilən fırlanma bucağından Fishnet yaratmaq üçün Y koordinatını təyin etmək?

ArcPy / Python istifadə edərək istənilən fırlanma bucağından Fishnet yaratmaq üçün Y koordinatını təyin etmək?


Fishnet ArcGIS Help-dən necə işləyir?

Y oxu koordinatı üçün bir dəyərin hesablanması Fırlanma bucağını bilirsinizsə, Y Oxu Koordinat parametri üçün bir dəyəri aşağıdakı kimi hesablaya bilərsiniz: Bucaq toxunuşu = x-koordinat / y koordinat Fishnet Y-Axis nöqtə hesablanması üçün Məsələn, bucaq 60 dərəcədir. Y koordinatının 10 olduğu fərz edilərsə x koordinatı = tan (60) * 10 = 1.732 * 10 = 17.32 Y oxunun koordinat nöqtəsi (17.32,10) -dir.

Pythonda.

x-koordinat = (math.tan (math.radians (60) * 10) * 10) çap x-koordinat >>> 17.32

Mükəmməl bu doğru!

İndi həqiqi bir koordinat istifadə etməyə çalışaq

Lat = 51.003757 Uzun, -114.09341083433694 və ya NAD83 UTM Zonasında 11 x, y = 703919.581359, 5654264.1538 UTM Zone 11

Nəticələrin heç birinin üstündəki kimi U / TM-nin lat / long və x, y koordinatları ilə 10-u əvəz edən eyni düsturdan istifadə etmək mənasızdır. Mən nəyi itirirəm?


arcpy, traceback, os, sys, riyaziyyatdan riyaziyyat idxal radians, sin, cos arcpy import env.overwriteOutput = True inFC = arcpy.GetParameterAsText (0) outFolder = arcpy.GetParameterAsText (1) nRows, nCols = 4,3 env.workspace = outFolder düzbucaqlı = r'in_memory  düzbucaqlı 'tempf = r'in_memory  many' outFile = "fnet.shp" ## ERROR TAMAMLAMA def showPyMessage (): arcpy.AddMessage (str (time.ctime ()) + "-" + mesaj) def ShapeMake (pGon, bucaq): ar = arcpy.Array () a = radians (bucaq) hissəsi = pGon.getPart (0) qismən p üçün: x, y = pX, pY xN = cos (a) * x + sin (a) * y yN = -sin (a) * x + cos (a) * y pN = arcpy.Point (xN, yN) s = "% s% s"% (xN, yN) ar.add (pN) pgonRotated = arcpy.Polygon (ar) return pgonRotated try: arcpy.MinimumBoundingGeometry_management (inFC, düzbucaqlı, "RECTANGLE_BY_WIDTH", "ALL", "", "MBG_FIELDS.C) arc ilə düzbucaqlı, ("SHAPE @", "MBG_Orientation")) sətirlər kimi: satırdakı sıra üçün: shp, bucaq = sıra del sıra, satırlar kənarda = ShapeMake (shp, -angle) ölçü = onside.extent origPoint = "% s% s "% (ölçü.XMin, ölçü.YMin) yPoint ="% s% s "% ( ölçü.XMin, ölçü.YMax) endPoint = "% s% s"% (ölçü.XMax, ölçü.YMax) arcpy.CreateFishnet_management (tempf, origPoint, yPoint, "0", "0", nRows, nCols, endPoint, "NO_LABELS", "", "POLYGON") arcpy.da.UpdateCursor ilə (tempf, "SHAPE @") satır şəklində: satır sıraları üçün: shp = sıra [0] rollBack = ShapeMake (shp, bucaq) sıra [0 ] = rollBack rows.updateRow (sıra) del sıra, satırlar arcpy.CopyFeatures_management (tempf, outFolder + os.sep + outFile) xaricində: message = " n *** PYTHON ERRORS ***"; showPyMessage () message = "Python Traceback Məlumat:" + traceback.format_tb (sys.exc_info () [2]) [0]; showPyMessage () message = "Python Error Info:" + str (sys.exc_type) + ":" + str (sys.exc_value) + " n"; showPyMessage ()

bu çıxış nümunəsidir

Bəli, 2 sətirdən çox koddur


Budur istifadə etdiyim cavab:

def rotate_point (giriş_ nöqtəsi, mərkəz_ nöqtəsi, bucaq = 0): bucaq = math.radians (bucaq) x = float (input_point.X) - float (center_point.X) y = float (input_point.Y) - float (center_point.Y) xr = (x * math.cos (bucaq)) - (y * math.sin (bucaq)) + float (center_point.X) yr = (x * math.sin (bucaq)) + (y * math.cos ( bucaq)) + float (center_point.Y) qayıt arcpy.Point (xr, yr)

Mənşə nöqtəsi (0,0) ətrafında fırlanırsınız. Dönüşü təyin etmək üçün bir neçə nöqtəni tapmağın düzgün yolu bu http://www.mathematics-online.org/inhalt/aussage/aussage444/


2 Cavablar 2

Üç ortoqonal vahid vektorunuzun $ hat olduğunu deyək = sol [ başlayın i_x i_y i_z son right], quad hat = sol [ başlayın j_x j_y j_z end right], quad hat = sol [ başlayın k_x k_y k_z end sağ] $ Dönmə matrisi $ mathbf$ x $ oxunu $ hat-a çevirən $$, $ y $ oxdan $ hat$ və $ z $ oxu $ hat$ $ mathbf = sol [ başlayın i_x & amp j_x & amp k_x i_y & amp j_y & amp k_y i_z & amp j_z & amp k_z end sağ] $ Çünki $ mathbf$ ortonormaldır, tersi transpozisiyadır və $ mathbf matrisidir^ <-1> $ hat döndürən$ ilə $ x $ ox, $ hat$ ilə $ y $ oxu və $ hat$ ilə $ z $ oxu, $ mathbf-dir^ <-1> = mathbf^ T = sol [ başlayın i_x & amp i_y & amp i_z j_x & amp j_y & amp j_z k_x & amp k_y & amp k_z end sağ] $

Euler və Tait-Bryan rotasiyaları üç ox fırlanmasının birləşməsidir, $ başlar mathbf_x & amp = left [ başlayın 1 & amp 0 & amp 0 0 & amp cos phi & amp - sin phi 0 & amp sin phi & amp cos phi end sağ] mathbf_y & amp = left [ başlayın cos theta & amp 0 & amp sin theta 0 & amp 1 & amp 0 - sin theta & amp 0 & amp cos theta end sağ] mathbf_z & amp = left [ başlayın cos psi & amp - sin psi & amp 0 sin psi & amp cos psi & amp 0 0 & amp 0 & amp 1 end sağ] son$ burada $ phi $, $ theta $ və $ psi $ müvafiq olaraq $ x $, $ y $ və $ z $ oxu ətrafında daxili dönmələri təyin edir. Kombinə edilmiş fırlanma matrisi üç matrisin məhsuludur (yuxarıdakı birincidən ikisi və ya üçü təkrarlana bilər) bir-birinə vurulur, ilk daxili fırlanma sağda, ən solda.

Mənim təvazökar fikrimcə, çətin olan hissə, doğru fırlanma qaydasının dəqiq müəyyənləşdirilməsidir. OP-in vəziyyətində $ mathbf olduğuna inanıram_z mathbf_y mathbf_x $, amma əmin deyiləm ki, bu, bəlkə də bir növ oynaqlı qol üçün olduğundan, bunu mütləq ədədi olaraq təsdiqləyərdim.

İstəməyəcəyəm istisna olmaqla, Euler / Tait-Bryan açıları xas olan qeyri-müəyyənliklərinə görə pis olduqları üçün əvəzinə oriyentasiyanı təsvir etmək üçün vahid quaternions (versors) istifadə edərdim. Daha asan, məntiqli və yaxşı müəyyənləşdirilmişlər.

Qarşımızda duran problem ondadır ki, "işləmə vaxtı" bizdə $ mathbf-nin doqquz ədədi komponenti var$, lakin $ phi $, $ theta $ və $ psi $ açılarını tapmaq lazımdır.

Doğru fırlanma formalizmi həqiqətən $ mathbf olarsa = mathbf_z mathbf_y mathbf_x $ sonra $ mathbf = sol [ başlayın cos theta cos psi & amp sin phi sin theta cos psi - cos phi sin psi & amp cos phi sin theta cos psi + sin phi sin psi cos theta sin psi & amp sin phi sin theta sin psi + cos phi cos psi & amp cos phi sin theta sin psi - sin phi cos psi - sin theta & amp sin phi cos theta & amp cos phi cos theta end right] $ və $ mathbf ilə müqayisə$, biz daha sadə şərtlərlə beş giriş seçirik (və bütün Euler və Tait-Bryan açılarının mövqeyi və dəqiq şərtləri dəyişən beş belə giriş var), $ left lbrace start i_x & amp = cos theta cos psi i_y & amp = cos theta sin psi i_z & amp = - sin theta j_z & amp = sin phi cos theta k_z & amp = cos phi cos theta end right. $ Əgər $ -90 ° le theta le + 90 ° $ seçsək, onda cos theta ge 0 $ və açıları həll edə bilərik: $ left lbrace begin cos phi & amp = frac < sqrt <1 - i_z ^ 2 >> sin phi & amp = frac < sqrt <1 - i_z ^ 2 >> cos theta & amp = sqrt <1 - i_z ^ 2> sin theta & amp = -i_z cos psi & amp = frac ​​< sqrt <1 - i_z ^ 2 >> sin psi & amp = frac < sqrt <1 - i_z ^ 2 >> end sağ. $ Başqa sözlə, $ sol lbrace başlayır phi & amp = arctan left ( frac sağ) theta & amp = arctan sol ( frac <-i_z> < sqrt <1-i_z ^ 2 >> right) = arcsin left (-i_z right) psi & amp = arctan left ( frac sağ) son sağ. Donanma üzən nöqtəli əməliyyat dəstəyi olmayan bir mikrokontrolderdə ədədi $ sin $ və $ cos $ dəyərlərini vahid vektoru kimi istifadə etmək olar (bunların ola bilməyəcəyini nəzərə alaraq tam olaraq orijinal $ mathbf matrisini hesablayarkən yuvarlaqlaşdırma səhvlərinə görə vahid uzunluğu$) və məsələn tətbiq edin. İstədiyiniz dəqiqlikdə açıları əldə etmək üçün CORDIC.

Budur minimal düsturlar (və matrislər yoxdur) ilə intuitiv bir yanaşma. Nümunənizdəki fırlanma açılarının hamısının nisbətən kiçik olmasına kömək edir, yəni hər hansı bir ox haqqında $ frac pi2 $ radians-dan çox fırlanmanı nəzərə almağa ehtiyac yoxdur.

İlk fırlanma ($ x $ oxu haqqında) $ x $ oxunu hərəkətə gətirmir. İkinci dönmə ($ y $ oxu ətrafında) $ x $ oxunu hərəkətə gətirir, ancaq $ x, z $ müstəvisində.

Bu səbəbdən $ z $ oxu ətrafında fırlanma yalnız $ x $ oxunun görüntüsünü $ x, z $ müstəvisindən $ hat imath ilə paralel olana qədər hərəkət etdirməkdən məsuldur. $ Haqqında fırlanma bucağını təyin edə bilərik $ z $ oxu, $ hat imath $ -ı yenidən $ x, z $ müstəvisinə gətirmək üçün bu dönmə tərzini dəyişdirərək. Tələb olunan açı $ lvert Delta c rvert = sol lvert arctan frac < hat imath_y> < hat imath_x> right rvert. $

İndi $ x, z $ müstəvisində $ hat imath $ şəklinə sahib olduğumuzdan, hipotenus $ 1 $ və ayaqları $ hat imath_z $ və $ sqrt < hat ilə düzbucaqlı bir üçbucaq yaratdığını görürük. imath_x ^ 2 + hat imath_y ^ 2>. $ Bu üçbucağın açılarını araşdırarkən, aydın olmalıdır ki, $ hat imath $ şəklini $ x $ -ya qaytaran $ y $ oxu ətrafında fırlanma. ox $ lvert Delta b rvert = sol lvert arcsin hat imath_z right rvert böyüklüyünə malikdir.

$ X $ oxu ətrafında fırlanmanın işlənməsi daha çətindir, çünki digər iki fırlanmanın təsirlərini nəzərə almalıdır. İnverxe $ z $ fırlanma $ x, y $ müstəvisindəki vektorların görüntülərinin yüksəkliklərini dəyişdirmir, yəni $ hat jmath $ və $ hat k $ şəkillərində hələ də $ z $ - var komponentləri müvafiq olaraq $ hat jmath_z $ və $ hat k_z, $. Ters $ y $ fırlanma edir vektorların görüntülərinin $ z $ koordinatlarını dəyişdirin, lakin eyni nisbətdə $ hat jmath $ və $ hat k $ şəkillərini təsir edir, yəni ters $ y $ fırlanma $ olan görüntü vektorlarını əmələ gətirir. z $ koordinatları bir sıra həqiqi ədədlər üçün müvafiq olaraq $ t hat jmath_z $ və $ t hat k_z, $ olur. $ Beləliklə, $ z $ fırlanma və $ y $ fırlanmanı geri qaytardıqdan sonra şəkillərlə başa çatırıq. $ y $, z $ təyyarəsindəki $ z $-koordinatları $ t hat jmath_z $ və $ t hat k_z $ və bunlar iki dik vahid vektorları olduğundan, $ hat jmath $ və $ hat k $ $ y $ oxunda düzəltdikləri düzbucaqlı üçbucaqlar bir-birinə uyğundur, beləliklə $ hat jmath $ şəkli xüsusilə $ z $ koordinat $ t hat jmath_z $ və $ y $ koordinat $ t hat k_z $ . Bu üçbucağın açılarını araşdırarkən, $ hat jmath $ şəklini $ y $ oxuna döndürmək üçün lazım olan bucaq $ lvert Delta z rvert = sol lvert arctan frac right rvert = sol lvert arctan frac < hat jmath_z> < hat k_z> right rvert. $

Əlavə yoxlama bucaq işarələrinin başqa birində matris cəbrindən əldə edilmiş nəticələri təsdiqləyən $ hat imath, $ $ hat jmath, $ və $ hat k, $ koordinatlarının işarələrindən necə asılı olduğunu aşkar etməlidir. cavab ver.

$ Arcsin $ və $ arctan aralığında olmayan açılara ehtiyacınız ola biləcəyi üçün oxlar ətrafında fırlanma böyük ola bilərsə işlər biraz daha mürəkkəbləşir. $ Düzgün açıları əldə etmək üçün əlavə qaydalara ehtiyacınız olacaq. Ancaq görünür ki, bu narahatlıq işləməyiniz lazım olan rotasiyalara aid deyil.


3D-də fırlanma

Bu, 2B-də işləyir, 3B-də isə üçüncü oxu nəzərə almaq lazımdır. Bir vektoru 2D-də mənşə (nöqtə) ətrafında fırlatmaq sadəcə Z oxu ətrafında (xətt) 3D şəklində döndərmək deməkdir, çünki Z oxu ətrafında fırlandığımız üçün koordinatı sabit saxlanılmalıdır, yəni 0 ° (fırlanma olur XY təyyarəsini 3B). 3D olaraq Z oxu ətrafında fırlanacaq olar

Y oxu ətrafında olardı

X oxu ətrafında olardı

Qeyd 1: fırlanma yerinə yetirilən oxun matrisində sinus və kosinus elementləri yoxdur.

Qeyd 2: Dönüşlərin yerinə yetirilməsinin bu üsulu öyrədilməsi sadə və qavranılması asan olan Euler bucaq fırlanma sistemini izləyir. Bu, 2B və sadə 3B hallar üçün mükəmməl işləyir, lakin hər üç oxun ətrafında eyni zamanda fırlanma aparılması lazım olduqda, bu sistemdəki Gimbal kilidi kimi özünü göstərən bir çatışmazlıq səbəbindən Euler açıları kifayət olmaya bilər. İnsanlar belə vəziyyətlərdə Quaternions-a müraciət edirlər, bu da ondan daha inkişaf etmiş, lakin düzgün istifadə edildikdə Gimbal kilidlərindən əziyyət çəkmir.

Ümid edirəm bu əsas rotasiyanı aydınlaşdırır.


7 Cavablar 7

Bunun üçün biraz əvvəl Pythona bir neçə kod köçürdüm. Yalnız ona keçid verməyə hazırlaşırdım, amma məlum oldu ki, bu vaxt vebdən düşdü, buna görə tozunu alıb yenidən yükləməli oldum. John Walker-in moontoolundan əldə edilən moon.py-yə baxın.

Bunun üçün dəqiq bir müddət üçün bir arayış tapa bilmirəm, həm də dəqiqdir, amma müəlliflər olduqca sərt idilər. Hə deməkdir ki, bəli, trig istifadə edir, amma bunu nə üçün istifadə edəcəyinizi təsəvvür edə bilmirəm ki, bunu hesablama baxımından qadağan edər. Python funksiyası çağırış xərcləri, ehtimal ki, trig əməliyyatlarından daha çoxdur. Kompüterlər hesablama işində olduqca sürətli.

Kodda istifadə olunan alqoritmlər aşağıdakı mənbələrdən tərtib edilmişdir:

Meeus, Jean. Astronomik Alqoritmlər. Richmond: Willmann-Bell, 1991. ISBN 0-943396-35-2.

Yalnız bir kitab alırsanız, mütləq bu kitab olduğundan əmin olun. Alqoritmlər kompüter proqramları kimi deyil, riyazi olaraq təqdim olunur, lakin kitabdakı bir çox alqoritmi həyata keçirən mənbə kodu, QuickBasic, Turbo Pascal və ya C-də yayımçıdan ayrı sifariş verilə bilər. Meeus, ayıklama üçün vacib olan bir çox işlənmiş hesablama nümunəsi təqdim edir. kodunuz və tez-tez dəqiqlik, sürət, mürəkkəblik və uzunmüddətli (əsr və minilliklər) etibarlılıq arasında fərqli alverlərlə bir neçə alqoritm təqdim edir.

Duffett-Smith, Peter. Kalkulyatorunuzla praktik astronomiya. 3 ed. Cambridge: Cambridge University Press, 1981. ISBN 0-521-28411-2.

Başlıqdakı Kalkulyator sözünə baxmayaraq, planetlərin mövqelərini, orbitlərini, tutulmalarını və bu kimi şeyləri hesablayan bir proqram inkişaf etdirmək istəyirsinizsə bu dəyərli bir istinaddır. Meeusdan daha çox məlumat verilir, bu da astronomiyada hələ məlumatı olmayanlara tez-tez qarışıq olan terminologiyanı öyrənməyə kömək edir. Verilən alqoritmlər Meeus tərəfindən verilənlərdən daha sadə və daha dəqiqdir, lakin ən praktik iş üçün uyğundur.


2 Cavablar 2

Bir quaternionu özbaşına necə düzgün bir şəkildə döndərəcəyini öyrəndim. Əsas odur ki, fırlanmaq istədiyim ox üçün vektorlar tapım. Bunlar bucaq həqiqi oxun ətrafında dönmə miqdarı olduqda, oxdan və bucaqdan quaternionlar yaratmaq üçün istifadə olunur.

Aşağıdakı kod nə ilə bitdiyimi göstərir. Həm də bir müddət faydalı ola biləcək kameranı fırlatmağa imkan verir.

Quaternion rotasiyası haqqında nadir hallarda məlumat tapdığım üçün yuxarıdakı kodu izah etmək üçün bir az vaxt sərf edəcəyəm.

Fırlanmanın alınması və təyin edilməsi fizika mühərrikinə xasdır və bu sualla əlaqəli deyil, buna görə bu barədə ətraflı danışmayacağam. Növbəti hissə, miqdarı bir siçan həssaslığı ilə vurmaq həqiqətən aydın olmalıdır. İstiqamət vektorlarına davam edək.

  • Yuxarıdakı vektor öz tətbiqinizdən asılıdır. Ən əlverişli olaraq, müsbət Y oxu işarə edir, buna görə 0, 1, 0 ilə başa çatırıq.
  • Görünüş vektoru kameranın baxdığı istiqaməti təmsil edir. Sadəcə olaraq kameranın fırlanma quaternionu tərəfindən irəli bir vahid vektorunu döndəririk. Yenə də irəli istiqamətləndirici vektor konvensiyalardan asılıdır. Y oxu yuxarıdırsa, müsbət Z oxu 0, 0, 1 olan irəli yönəldə bilər.
  • Bunu növbəti vektorla qarışdırmayın. Kamera fırlanmasına istinad edən irəli adlandırılmışdır. Buna görə yalnız görünüş vektorunu yerə proyeksiya etməliyik. Bu vəziyyətdə, sadəcə baxmaq vektorunu alırıq və yuxarı işarə edən komponenti görməməzlikdən gəlirik. Səliqə üçün həmin vektoru normallaşdırırıq.
  • Yan vektor kamera istiqamətindən sola doğru istiqamətlənir. Bu səbəbdən həm yuxarıya, həm də irəli vektora dikdir və hesablamaq üçün çarpaz məhsuldan istifadə edə bilərik.

Bu vektorları nəzərə alsaq, onların ətrafında kamera quaternionunu düzgün şəkildə çevirə bilərik. Z, Y və ya Z ilə başlayacağınız Euler açısı ardıcıllığından asılıdır, bu da tətbiqdən tətbiqə dəyişən bir konvensiyadır. Rotasiyaların Y X Z qaydasında tətbiq edilməsini istədiyim üçün aşağıdakıları edirəm.

  • Əvvəlcə kameranı Y fırlanma miqdarı ilə yuxarı ox ətrafında çevirin. Bu yaw.
  • Sonra X məbləğinə görə sola yönəldən yan oxun ətrafında dönün. Səsdir.
  • Və sonda, rulon tətbiq etmək üçün irəli vektorun ətrafında Z miqdarında döndürün.

Bu fırlanmaları tətbiq etmək üçün, dördüncüləri ox və bucaqla cari kamera fırlanışı ilə çoxaltmalıyıq. Sonda ortaya çıxan quaternionu fizika simulyasiyasında bədənə tətbiq edirik.


İki nöqtə arasındakı bucağı tapmaq

Hər şeydən əvvəl, yaratdığım bir proqram üçün bəzi riyazi məlumatları edirəm.

Nə etmək istədiyim, siçanın olduğu yerə doğru dönən bir obyektin nöqtəsidir. Tankın mouseX və mouseY-dən asılı olaraq fırlandığı tank oyunlarında olduğu kimi

Proqramlaşdırma baxımından buna atan2 funksiyasından istifadə etməklə iki nöqtə arasında bir bucaq qaytarır (inanıram).

Etmək istədiyim bir obyekt arasındakı bucağı tapmaq və siçan vurmaqdır.

Bunun üçün xüsusi bir riyaziyyat formulu varmı? Çünki Google-dakı araşdırmalarım proqramçı olduğum üçün 'atan2' gətirir. Əksər dillərin öz riyaziyyat kitabxanası olduğundan mücərrəddir. Riyaziyyat baxımından düsturun necə işlədiyini bilmək istəyirəm.

Sual budur, iki nöqtə arasındakı bucağı tapmaq üçün bunun üçün düstur nə adlanır. Beləliklə, obyektim mouseX və mouseY mövqeyinə doğru dönə bilər


2 Cavablar 2

İndi müvafiq Tait-Bryan açıları ilə --- a, b və c ilə müəyyən bir fırlanma dəstini (əvvəlcə X, sonra Y, sonra Z deyək) nəzərdən keçirirəmsə. Mənim fırlanma matrisim aşağıdakılar olacaq.

O massivə baxın. $ Begin şəklindədir cos (b) cos (c) & amp - cos (b) sin (c) & amp sin (b) cdots & amp cdots & amp - cos (b) sin (a) cdots & amp cdots & amp phantom <-> cos (b) cos (a) end$

$ A_ <13> $ elementinin yalnız $ b $ -dan asılı olduğunu unutmayın: $ a_ <13> = sin (b) $. Bu dərhal $ b $: $ b = arcsin (a_ <13>) $ bucağını verir. $ Cos b $, Arcsine (x) aralığında $ [- pi / 2, pi / 2] $ üçün $ b $ üçün mənfi olmadığından, iki arqantent arqantent $ a $ bucaqlarını hesablamaq üçün istifadə edilə bilər. və $ c $: $ a = operator adı(-a_ <23>, a_ <33>) $ və $ c = operator adı(-a_ <12>, a_ <11>) $.

Yeniləmə: Gimbal kilidi

Yuxarıda göstərilənlər natamamdır. $ Cos b $ sıfır olduğunu düşünək. $ B = pm frac pi 2 $ olduqda, $ sin b = pm 1 $ olur. Matris bu hallarda aşağıdakı iki formadan birini alır.

$ Sin b = -1 $ olduqda, matris $ start olur 0 & amp 0 & amp -1 fantom <-> sin (ac) & amp fantom <-> cos (ac) & amp fantom <-> 0 fantom <-> cos (ac) & amp - sin (ac) & amp fantom <-> 0 end$

$ Sin b = 1 $ olduqda, matris $ start olur 0 & amp 0 & amp fantom <-> 1 fantom <-> sin (a + c) & amp fantom <-> cos (a + c) & amp fantom <-> 0 - cos ( a + c) & amp fantom <-> sin (a + c) & amp fantom <-> 0 end$

Qeyd edək ki, hər iki halda, birdən çox $ (a, c) $ cütü eyni matrisi əldə edəcəkdir. $ Sin b = -1 $ olduqda, matrisdən yalnız $ a-c $: $ tan (a-c) = frac fərqi çıxarıla bilər. >> bu vəziyyətdə gimbal kilidi. $ Sin b = 1 $ olduqda, yalnız $ a + c $: $ tan (a + c) = frac cəmi əldə edilə bilər >> bu digər gimbal kilid vəziyyətində. Hər iki halda da, $ a və $ c $ -ları unikal şəkildə müəyyən etmək qabiliyyəti itir. Çözümlərdən biri bu iki açıdan birini özbaşına sıfıra qoymaqdır. $ C = 0 $ təyin etmək daha rahatdır, çünki $ a $ $ a = operator adı olaraq hesablana bilər(a_ <21>, a_ <22>) hər iki halda $.


2 Cavablar 2

Göründüyü kimi hər iki çərçivə də P nöqtəsindəki son efektora yapışdırılmış və sabit bir açı ilə əvəzləşdirilmişdir $ beta $. Beləliklə, bu suala cavab vermək üçün həqiqətən D-H parametrlərini nəzərə almaq lazım deyil - sadəcə sadə bir fırlanma matrisi qiymətləndirməsi edin.

Bəs çərçivələr necədir, $ F_2 $ = $ [ hat hat hat] ^ T $ və $ F_e $ = $ [ hat hat hat] ^ T $, əlaqəli? Yuxarıda göstərdiyiniz diaqramdan aşağıdakı münasibətlərimiz var:

$ hat = cos beta hat + sin beta hat$ $ hat = cos beta hat - sin beta hat$ $ hat = - hat$

$ Hat olduğunu unutmayın$ xal və $ hatsəhifədən $ bal çıxdı.

Sonra yuxarıdakı fırlanma matrisinizin bundan necə düşdüyünü görürsünüzmü? Aydındır ki,

Bir fırlanma matrisinə rejissor kosinus matrisi də deyilir. Fırlanma matrisinin elementləri, əlaqəli iki koordinat sisteminin vahid vektorlarının kosinuslarıdır. Burada daha ümumi bir izahat tapa bilərsiniz.

$ Bucağı (e_ <2, i>, e_ olsun) $ sabit istinad çərçivəsinin i oxundakı vahid vektoru ilə dönmüş çərçivənin j oxunun vahid vektoru arasındakı bucağı bildirin.

Sizin vəziyyətinizdə bunu müəyyən edirik:

Bu, iki x oxun vahid vektorları arasındakı $ 90 ^ circ $ bucağına çevrilir.

Bu, istinad çərçivəsinin y oxlarının vahid vektorları ilə dönmüş çərçivənin x oxu arasındakı $ 90 deg $ bucağına çevrilir.

Bu, istinad çərçivəsinin z oxlarının vahid vektorları ilə dönmüş çərçivənin x oxu arasındakı $ 180 ^ circ $ bucağına çevrilir.

Matrisin bütün digər elementləri üçün oxşar, amma ən maraqlıları budur:

Bu, istinad çərçivəsinin y oxlarının vahid vektorları ilə dönmüş çərçivənin y oxu arasındakı $ beta ^ circ $ bucağına çevrilir.

Bu, istinad çərçivəsinin z oxlarının vahid vektorları ilə dönmüş çərçivənin x oxu arasındakı $ beta ^ circ $ bucağına çevrilir.

$ cos ( bucaq ((e_ <2, y>, e_)) = -sin ( beta) $

Bu, istinad çərçivəsinin y oxlarının vahid vektorları ilə dönmüş çərçivənin z oxu arasındakı $ beta + 90 ^ circ $ bucağına çevrilir.


Dönmə bucağını əldə edə bilərsiniz: $ theta = cos ^ <-1> left [0.5 (r_ <11> + r_ <22> + r_ <33> - 1) right] n_x = frac - r_ <23>> <2 sin ( theta)> n_y = frac - r_ <31>> <2 sin ( theta)> n_z = frac - r_ <12>> <2 sin ( theta)> $

Beləliklə, ilk probleminizi nəzərə alaraq: $ R = begin 0 & amp 1 & amp 0 -1 & amp 0 & amp 0 0 & amp 0 & amp 1 sonu \ $

$ theta = cos ^ <-1> sol [0.5 (0 +0 +1 - 1) sağ] theta = 1.57 mbox = 90 ^ < circ> n_x = frac <0 - 0> <2 sin (90 ^ < circ>)> n_y = frac <0 - 0> <2 sin (90 ^ < circ>)> n_z = frac <-1 - 1> <2 sin (90 ^ < circ>)> n_x = 0 n_y = 0 n_z = -1 $ So burada ilk probleminiz üçün -z oxu ətrafında 90 dərəcə və ya bərabər şəkildə + z oxu ətrafında -90 dərəcə döndüyünüzü görə bilərsiniz.

Eynilə, ikinci probleminiz üçün: $ R = begin 0 & amp 0 & amp 1 1 & amp 0 & amp 0 0 & amp 1 & amp 0 sonu \ $

$ theta = cos ^ <-1> sol [0.5 (0 +0 + 0 - 1) sağ] theta = 2.09 mbox = 120 ^ < circ> n_x = frac <1 - 0> <2 sin (120 ^ < circ>)> n_y = frac <1 - 0> <2 sin (120 ^ < circ>)> n_z = frac <1 - 0> <2 sin (120 ^ < circ>)> n_x = 0.577 n_y = 0.577 n_z = 0.577 $

Burada x = y = z = 0.577 olan bir fırlanma oxunuz var (ancaq fırlanmanın təbiəti haqqında düşünmək üçün x = y = z = 1-ə qədər miqyaslana bilər) və sonra +120 döndərirsiniz bu ox haqqında dərəcə.

Ümid edirəm ki, aydın olmayan bir şey qoymuşamsa, şərh verməyə kömək edin.

Başlayanlar üçün fırlanma matrislərinin məhsulu unikal deyil.

Üç elementar fırlanma tərtib etməklə istənilən oriyentasiya əldə edilə bilər

Bir sıra fırlanma açılarını bərpa etmək üçün tam fırlanma matrisi ilə başlamalı və sonra geriyə işləməli olacaqsınız. 3-2-1 fırlanmasına baxaq.

$ > $ = $ sol ( başlayın cos theta cos phi & amp cos theta sin psi & amp -sin theta sin phi sinθcosψ − cos phi sinψ & amp sin phi sinθsinψ + cos phi cosψ & amp sin phi cosθ cos phi sinθcosψ + sin phi sinψ & amp cos phi sinθsinψ − sin phi cosψ & amp cos phi cosθ end sağ) $

İndi $ theta $ üçün həll edə bilərik. Bu, $ psi $ və $ phi $ üçün həll etmək üçün istifadə edilə bilər. $ ^ AR_c $ matrisinizə baxaraq $ theta $ is $ - frac < pi> <2> $, $ psi $ is $ - frac < pi> <2> $ və $ phi $ 0-dir.

Fərdi halları həll etmək üçün, özünüz skript yazmaq istəmirsinizsə, bu Çevrmə Formatları üçün onlayn Kalkulyatorda matrisə girə, çıxışı dərəcələrə keçirə və ox açısının nəticəsini görə bilərsiniz.

$ <> ^ AR_c $ vəziyyətinizdə, oxun ətrafında 120 dərəcə bir fırlanma meydana gətirir [0.5773503, 0.5773503, 0.5773503].

$ SO (3) daxilində ixtiyari fırlanma matrisini nəzərdən keçirin. $ V in < mathbb R> ^ 3 $ vektorunu $ w = < bf R> v $ intuitiv olaraq dəyişdirə bilərik, əgər $ v $ $ bf R $ fırlanma oxuna uyğun gəlsə, o zaman olacaq fırlanma ilə dəyişməz olun, yəni $ w = v $.

Beləliklə, fırlanma oxu $ bf R $ xüsusi bir vektor olmalıdır. $ Bf R $ 3x3 matris olduğundan 3 özvektoru vardır. Hər bir özvektorun əlaqəli özünəməxsus dəyəri var: həmişə 1-ə bərabər olan ən azı bir xüsusi dəyər var (yəni vektorun uzunluğu fırlanma ilə dəyişməzdir) və sıfır olmayan fırlanma üçün digər iki öz dəyər də kompleks birləşmə cütüdür. Birinə bərabər olan öz dəyərinə uyğun olan xüsusi vektor fırlanma oxudur.

MATLAB-da sadə bir nümunə

y oxu ətrafında 0,3 radian fırlanma (bu funksiya MATLAB üçün Robotics Toolbox-dan).

burada x, sütunları xüsusi vektorlar olan bir matrisdir və e, öz dəyərlərinin diaqonal matrisi. Vahid öz dəyər 3-cü sütundadır, beləliklə fırlanma oxumuz x-un həqiqi və y oxuna paralel vahid-vektor olan $ [0, 1, 0] ^ T $ -a bərabər olan üçüncü sütundur və orijinal oxu düzəldin. fırlanma.

Mürəkkəb özəl dəyərlər sizə ox ətrafında fırlanma miqdarı barədə məlumat verir

Toolbox bütün bunları sizin üçün yerinə yetirən bir funksiyaya malikdir

Əks istiqamətə, fırlanma oxundan və bucaqdan fırlanma matrisinə getmək üçün Rodrigues formulundan istifadə edin. Bu Toolbox-da aşağıdakı kimi verilir


Videoya baxın: Python in ArcGIS. Урок 1. arcpy: введение