أكثر

تحديد إحداثيات Y لإنشاء شبكة صيد السمك من زاوية الدوران المطلوبة باستخدام ArcPy / Python؟

تحديد إحداثيات Y لإنشاء شبكة صيد السمك من زاوية الدوران المطلوبة باستخدام ArcPy / Python؟


في كيفية عمل إنشاء شبكة صيد السمك من تعليمات ArcGIS ، تقول:

حساب قيمة إحداثيات المحور y إذا كنت تعرف زاوية الدوران ، يمكنك حساب قيمة معلمة إحداثيات المحور الصادي على النحو التالي: ظل الزاوية = إحداثيات x / إحداثيات شبكة صيد السمك نقطة المحور Y لحساب على سبيل المثال ، الزاوية 60 درجة. بافتراض أن إحداثي ص يساوي 10 ، ثم إحداثي س = تان (60) * 10 = 1.732 * 10 = 17.32 نقطة إحداثيات المحور ص هي (17.32،10).

في بايثون.

إحداثي س = (math.tan (math.radians (60) * 10) * 10) طباعة إحداثيات س >>> 17.32

ممتاز هذا صحيح!

لنحاول الآن استخدام تنسيق حقيقي

خط العرض = 51.003757 طويل ، -114.09341083433694 أو في NAD83 UTM Zone 11 x ، y = 703919.581359 ، 5654264.1538 في UTM Zone 11

باستخدام نفس الصيغة مع استبدال 10 بإحداثيات y للخط العرض / الطول ، و x ، y من UTM كما هو موضح أعلاه ، لا شيء من النتائج منطقية. ماذا ينقصني؟


استيراد arcpy ، traceback ، os ، sys ، الرياضيات من الرياضيات استيراد راديان ، الخطيئة ، cos من arcpy import env.overwriteOutput = True inFC = arcpy.GetParameterAsText (0) outFolder = arcpy.GetParameterAsText (1) nRows، nCols = 4،3 env.workspace = مستطيل outFolder = r'in_memory  rectangle 'tempf = r'in_memory  many' outFile = "fnet.shp" ## معالجة الخطأ def showPyMessage (): arcpy.AddMessage (str (time.ctime ()) + "-" + message) def ShapeMake (pGon، angle): ar = arcpy.Array () a = الراديان (الزاوية) الجزء = pGon.getPart (0) لـ p جزئيًا: x، y = pX، pY xN = cos (أ) * x + sin (a) * y yN = -sin (a) * x + cos (a) * y pN = arcpy.Point (xN، yN) s = "٪ s٪ s"٪ (xN، yN) ar. المستطيل ، ("SHAPE @"، "MBG_Orientation")) كصفوف: للصف في الصفوف: shp، angle = row del row، rows onside = ShapeMake (shp، -angle) مدى = onside.extent OrigPoint = "٪ s٪ s "٪ (مدى XMin ، مدى. YMin) yPoint ="٪ s٪ s "٪ ( range.XMin، range.YMax) endPoint = "٪ s٪ s"٪ (range.XMax، range.YMax) arcpy.CreateFishnet_management (tempf، OrigPoint، yPoint، "0"، "0"، nRows، nCols، endPoint، "NO_LABELS"، ""، "POLYGON") مع arcpy.da.UpdateCursor (tempf، "SHAPE @") كصفوف: للصف في الصفوف: shp = row [0] rollBack = ShapeMake (shp، angle) row [0 ] = rollBack rows.updateRow (row) del row، rows arcpy.CopyFeatures_management (tempf، outFolder + os.sep + outFile) باستثناء: message = " n *** أخطاء PYTHON ***"؛ showPyMessage () message = "معلومات تتبع Python:" + traceback.format_tb (sys.exc_info () [2]) [0] ؛ showPyMessage () message = "معلومات خطأ Python:" + str (sys.exc_type) + ":" + str (sys.exc_value) + " n"؛ showPyMessage ()

هذا مثال على الإخراج

نعم هو أكثر من سطرين من الكود


إليكم الإجابة التي انتهيت من استخدامها:

def rotate_point (input_point ، center_point ، زاوية = 0): angle = math.radians (angle) x = float (input_point.X) - float (center_point.X) y = float (input_point.Y) - float (center_point.Y) xr = (x * math.cos (زاوية)) - (y * math.sin (زاوية)) + تعويم (center_point.X) yr = (x * math.sin (زاوية)) + (y * math.cos ( زاوية)) + عائم (center_point.Y) إرجاع arcpy.Point (xr، yr)

أنت تدور حول نقطة الأصل (0،0). الطريقة الصحيحة للعثور على نقطتين لتحديد الدوران هي http://www.mathematics-online.org/inhalt/aussage/aussage444/


2 إجابات 2

لنفترض أن متجهات الوحدة المتعامدة الثلاثة هي $ hat = يسار [ ابدأ i_x i_y i_z end حق] ، رباعي قبعة = يسار [ ابدأ j_x j_y j_z end حق] ، رباعي قبعة = يسار [ ابدأ k_x k_y k_z end right] $ مصفوفة الدوران $ mathbf$ الذي يقوم بتدوير محور $ x $ إلى $ hatمحور $، $ y $ لـ $ hat$ و $ z $ المحور إلى $ hat$ هو $ mathbf = يسار [ ابدأ 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 right] $ لأن $ mathbf$ متعامد ، ومعكوسه هو منقوله والمصفوفة $ mathbf^ <-1> $ الذي يقوم بتدوير $ hat$ to $ x $ axis، $ hat$ to $ y $ المحور و $ hat$ to $ z $ axis ، هو $ mathbf^ <-1> = mathbf^ T = left [ start 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 حق] $

دوران أويلر وتايت بريان عبارة عن مجموعات من ثلاثة محاور دوران ، $ start mathbf_x & amp = اليسار [ البدء 1 & amp 0 & amp 0 0 & amp cos phi & amp - sin phi 0 & amp sin phi & amp cos phi end حق] mathbf_y & amp = left [ start cos theta & amp 0 & amp sin theta 0 & amp 1 & amp 0 - sin theta & amp 0 & amp cos theta end حق] mathbf_z & amp = اليسار [ البدء cos psi & amp - sin psi & amp 0 sin psi & amp cos psi & amp 0 0 & amp 0 & amp 1 end حق] نهاية$ حيث $ phi $ و $ theta $ و $ psi $ تحدد التدويرات الجوهرية حول المحور $ x $ و $ y $ و $ z $ على التوالي. مصفوفة الدوران المجمعة هي نتاج ثلاث مصفوفات (اثنان أو ثلاثة من المصفوفات الأولى أعلاه يمكن تكرارها) مضروبة معًا ، أول دوران جوهري في أقصى اليمين ، وأخيرًا أقصى اليسار.

الجزء الصعب ، في رأيي المتواضع ، هو تحديد الترتيب الصحيح للتدوير بالضبط. أعتقد أنه في حالة OP هو $ mathbf_z mathbf_y mathbf_x $ ، لكنني لست متأكدًا لأن هذا على ما يبدو لذراع مفصلية من نوع ما ، سأقوم بالتأكيد بالتحقق عدديًا من هذا أولاً.

إلا أنني لن أفعل ذلك ، لأن زوايا أويلر / تايت برايان شريرة بسبب غموضها المتأصل ، سأستخدم رباعي الوحدات (الآيات) لوصف الاتجاه بدلاً من ذلك. إنها أسهل ومنطقية ومحددة جيدًا.

المشكلة المطروحة هي أنه في "وقت التشغيل" ، لدينا تسعة مكونات رقمية لـ $ mathbf$ ، ولكن عليك معرفة الزوايا $ phi $ و $ theta $ و $ psi $.

إذا كانت شكليات الدوران الصحيحة هي بالفعل $ mathbf = mathbf_z mathbf_y mathbf_x $ ثم $ mathbf = يسار [ ابدأ 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] $ ومقارنة بـ $ mathbf$ ، نختار الإدخالات الخمسة ذات المصطلحات الأبسط (وجميع زوايا Euler و Tait-Bryan لها خمسة إدخالات من هذا القبيل وتختلف الشروط الدقيقة) ، ونجد أن $ left lbrace begin 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. $ إذا اخترنا $ -90 ° le theta le + 90 ° $ ، ثم $ cos theta ge 0 $ ، ويمكننا حل الزوايا ، الحصول على: $ left lbrace start 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 حق . بعبارة أخرى ، $ left lbrace start phi & amp = arctan left ( frac right) theta & amp = arctan left ( frac <-i_z> < sqrt <1-i_z ^ 2 >> right) = arcsin left (-i_z right) psi & amp = arctan يسار ( frac حق) نهاية حق . $ على متحكم دقيق بدون دعم عملية الفاصلة العائمة للأجهزة ، يمكن للمرء استخدام القيم الرقمية $ sin $ و $ cos $ كمتجه للوحدة (مع ملاحظة أنها قد لا تكون كذلك بالضبط طول الوحدة بسبب أخطاء التقريب عند حساب المصفوفة الأصلية $ mathbf$) ، وتطبيق على سبيل المثال كورديك للحصول على الزوايا بالدقة المطلوبة.

إليك طريقة بديهية بأدنى قدر من الصيغ (ولا توجد مصفوفات). من المفيد أن تكون زوايا الدوران في مثالك صغيرة نسبيًا ، أي أننا لا نحتاج إلى التفكير في التدوير بأكثر من $ frac pi2 $ راديان حول أي من المحاور.

التدوير الأول (حول المحور $ x $) لا يحرك المحور $ x $. الدوران الثاني (حول المحور $ y $) يحرك المحور $ x $ ، لكن فقط ضمن المستوى $ x ، z $.

وبالتالي ، فإن الدوران حول محور $ z $ هو المسؤول الوحيد عن تحريك صورة المحور $ x $ من المستوى $ x ، z $ حتى يتوازى مع $ hat imath. $ يمكننا تحديد زاوية الدوران حول المحور $ z $ بعكس هذا الدوران لإعادة $ hat imath $ إلى المستوى $ x، z $. الزاوية المطلوبة لها حجم $ lvert Delta c rvert = left lvert arctan frac < hat imath_y> < hat imath_x> right rvert. $

الآن بعد أن أصبح لدينا صورة $ hat imath $ في المستوى $ x ، z $ ، نرى أنها تشكل مثلثًا قائمًا مع الوتر $ 1 $ والساقين $ hat imath_z $ و $ sqrt < hat imath_x ^ 2 + hat imath_y ^ 2>. $ عند فحص زوايا هذا المثلث ، يجب أن يكون واضحًا أن الدوران حول محور $ y $ يعيد صورة $ hat imath $ إلى $ x $ حجم المحور $ lvert Delta b rvert = left lvert arcsin hat imath_z right rvert. $

يعد التدوير حول محور $ x $ أكثر صعوبة لأنه يجب أن يأخذ في الاعتبار تأثيرات الدورتين الأخريين. لا يغير Inverxe $ z $ rotation ارتفاعات صور المتجهات فوق المستوى $ x و y $ ، أي أن صور $ hat jmath $ و $ hat k $ لا تزال تحتوي على $ z $ - المكونات $ hat jmath_z $ و $ hat k_z $ على التوالي. عكس دوران $ y $ عادة يفعل قم بتغيير إحداثيات $ z $ لصور المتجهات ، لكنها تؤثر على صور $ hat jmath $ و $ hat k $ بنفس النسب ، أي أن عكس $ y $ rotation ينتج عنه متجهات الصورة التي $ إحداثيات z $ هي $ t hat jmath_z $ و $ t hat k_z ، $ على التوالي ، لبعض الأرقام الحقيقية $ t. $ لذا بعد عكس دوران $ z $ و $ y $ rotation ، ينتهي بنا الأمر بصور لـ $ hat jmath $ و $ hat k $ في المستوى $ y ، z $ الذي يحتوي على $ z $ -التحالف $ t hat jmath_z $ و $ t hat k_z $ وبما أن هذين متجهين متعامدين للوحدة ، المثلثات اليمنى التي يشكل كل منها على المحور $ y $ متطابقة ، لذا فإن صورة $ hat jmath $ على وجه الخصوص لها $ z $ إحداثي $ t hat jmath_z $ و $ y $ إحداثي $ t hat k_z $ . فحص زوايا هذا المثلث ، من الواضح أن الزاوية المطلوبة لتدوير صورة $ hat jmath $ إلى المحور $ y $ لها حجم $ lvert Delta z rvert = left lvert arctan frac right rvert = left lvert arctan frac < hat jmath_z> < hat k_z> right rvert. $

يجب أن يكشف الفحص الإضافي كيف تعتمد علامات الزوايا على علامات إحداثيات $ hat imath ، $ hat jmath ، $ و $ hat k ، $ تأكيد النتائج التي تم الحصول عليها عن طريق جبر المصفوفة في أخرى إجابه.

تصبح الأمور أكثر تعقيدًا إذا كانت التدويرات حول المحاور كبيرة ، لأنك قد تحتاج إلى زوايا ليست في النطاق $ arcsin $ و $ arctan. $ ستحتاج بعد ذلك إلى قواعد إضافية للحصول على الزوايا الصحيحة. لكن يبدو من المحتمل أن هذا القلق لا ينطبق على الدورات التي تحتاج إلى العمل معها.


دوران ثلاثي الأبعاد

يعمل هذا في ثنائي الأبعاد ، بينما في الأبعاد الثلاثية نحتاج إلى مراعاة المحور الثالث. إن تدوير متجه حول الأصل (نقطة) في 2D يعني ببساطة تدويره حول المحور Z (خط) ثلاثي الأبعاد نظرًا لأننا ندور حول المحور Z ، يجب أن يظل إحداثياته ​​ثابتًا ، أي 0 درجة (يحدث الدوران على الطائرة XY ثلاثية الأبعاد). في 3D التناوب حول المحور Z سيكون

حول المحور ص سيكون

حول المحور السيني

ملاحظة 1: المحور الذي يتم حوله الدوران لا يحتوي على عناصر جيب أو جيب في المصفوفة.

ملاحظة 2: تتبع هذه الطريقة لأداء التدوير نظام أويلر لدوران الزوايا ، وهو نظام بسيط للتعليم وسهل الفهم. يعمل هذا بشكل جيد مع الحالات ثنائية الأبعاد والحالات ثلاثية الأبعاد البسيطة ، ولكن عندما يلزم إجراء الدوران حول جميع المحاور الثلاثة في نفس الوقت ، فقد لا تكون زوايا أويلر كافية بسبب نقص متأصل في هذا النظام والذي يتجلى على أنه قفل Gimbal. يلجأ الناس إلى Quaternions في مثل هذه المواقف ، والتي تكون أكثر تقدمًا من ذلك ولكنها لا تعاني من أقفال Gimbal عند استخدامها بشكل صحيح.

آمل أن يوضح هذا التناوب الأساسي.


7 إجابات 7

لقد قمت بنقل بعض التعليمات البرمجية إلى Python لهذه الفترة. كنت سأقوم فقط بالربط به ، ولكن اتضح أنه سقط من الويب في هذه الأثناء ، لذلك اضطررت إلى التخلص منه وتحميله مرة أخرى. انظر moon.py المشتق من أداة جون ووكر moontool.

لا يمكنني العثور على مرجع لهذا لمعرفة المدة الزمنية التي يكون فيها دقيقًا لأي منهما ، ولكن يبدو أن المؤلفين كانوا صارمين جدًا. مما يعني نعم ، إنه يستخدم حساب المثلثات ، لكن لا يمكنني أن أتخيل ما الذي ستستخدمه من أجل هذا سيجعله محظورًا من الناحية الحسابية. من المحتمل أن تكون تكلفة استدعاء دالة Python أكثر من تكلفة عمليات حساب المثلثات. أجهزة الكمبيوتر سريعة جدًا في الحوسبة.

الخوارزميات المستخدمة في الكود مستمدة من المصادر التالية:

ميوس ، جان. الخوارزميات الفلكية. ريتشموند: ويلمان بيل ، 1991. ISBN 0-943396-35-2.

يجب أن يكون لديك إذا اشتريت كتابًا واحدًا فقط ، فتأكد من أنه هذا الكتاب. يتم تقديم الخوارزميات رياضيًا ، وليس كبرامج كمبيوتر ، ولكن يمكن طلب التعليمات البرمجية المصدر التي تنفذ العديد من الخوارزميات في الكتاب بشكل منفصل عن الناشر إما في QuickBasic أو Turbo Pascal أو C. يوفر Meeus العديد من الأمثلة العملية للحسابات التي تعتبر ضرورية لتصحيح الأخطاء الكود الخاص بك ، وكثيراً ما يقدم العديد من الخوارزميات ذات المقايضات المختلفة بين الدقة والسرعة والتعقيد والصلاحية طويلة المدى (قرن وألفي سنة).

دوفيت سميث ، بيتر. علم الفلك العملي مع الآلة الحاسبة. الطبعة الثالثة. كامبريدج: مطبعة جامعة كامبريدج ، 1981. ISBN 0-521-28411-2.

على الرغم من كلمة Calculator في العنوان ، يعد هذا مرجعًا قيمًا إذا كنت مهتمًا بتطوير برنامج يحسب مواقع الكواكب والمدارات والكسوف وما شابه. تم تقديم معلومات أساسية أكثر مما ورد في Meeus ، مما يساعد أولئك الذين ليسوا على دراية بعلم الفلك على تعلم المصطلحات المربكة في كثير من الأحيان. تعد الخوارزميات المعطاة أبسط وأقل دقة من تلك التي توفرها Meeus ، ولكنها مناسبة لمعظم الأعمال العملية.


2 إجابات 2

اكتشفت كيفية تدوير رباعي بشكل صحيح بمفردي. كان المفتاح هو العثور على متجهات للمحور الذي أريد تدويره حوله. يتم استخدام هذه لإنشاء كواتيرونات من المحور والزاوية ، عندما تكون الزاوية هي المقدار الذي يجب تدويره حول المحور الفعلي.

يوضح الكود التالي ما انتهيت إليه. كما يسمح أيضًا بتدوير الكاميرا ، الأمر الذي قد يكون مفيدًا لبعض الوقت.

نظرًا لأنني نادرًا ما وجدت معلومات حول دوران الكواتيرنيون ، سأقضي بعض الوقت في شرح الكود أعلاه.

إن إحضار الدوران وضبطه خاص بمحرك الفيزياء ولا يرتبط بهذا السؤال ، لذا لن أتوسع في هذا الأمر. الجزء التالي ، وهو ضرب المبلغ بحساسية الماوس يجب أن يكون واضحًا حقًا. دعنا نواصل مع متجهات الاتجاه.

  • يعتمد المتجه الأعلى على التنفيذ الخاص بك. الأكثر ملاءمة هو أن المحور Y الموجب يشير إلى أعلى ، لذلك ينتهي بنا الأمر بـ 0 ، 1 ، 0.
  • يمثل متجه المشاهدة الاتجاه الذي تنظر إليه الكاميرا. نقوم ببساطة بتدوير متجه وحدة يشير إلى الأمام بواسطة رباعي دوران الكاميرا. مرة أخرى ، يعتمد متجه التأشير إلى الأمام على الاتفاقيات الخاصة بك. إذا كان المحور Y لأعلى ، فقد يشير المحور Z الموجب إلى الأمام ، وهو 0 ، 0 ، 1.
  • لا تخلط ذلك مع المتجه التالي. تمت تسميته إلى الأمام الذي يشير إلى دوران الكاميرا. لذلك نحن فقط بحاجة إلى إسقاط متجه المظهر على الأرض. في هذه الحالة ، نأخذ متجه البحث ونتجاهل مكون التأشير لأعلى. من أجل الدقة نقوم بتطبيع هذا المتجه.
  • يشير المتجه الجانبي إلى اليسار من اتجاه الكاميرا. لذلك ، فهو يتعامد مع كل من المتجه لأعلى ولأمام ويمكننا استخدام حاصل الضرب الاتجاهي لحسابه.

بالنظر إلى هذه المتجهات ، يمكننا تدوير الكاميرا الرباعية بشكل صحيح حولها. التي تبدأ بها ، Z ، Y أو Z ، تعتمد على تسلسل زاوية أويلر الذي يعد ، مرة أخرى ، اصطلاحًا يختلف من تطبيق إلى تطبيق. نظرًا لأنني أرغب في تطبيق التدوير بالترتيب Y X Z ، فأنا أفعل ما يلي.

  • أولاً ، قم بتدوير الكاميرا حول المحور العلوي بمقدار الدوران Y. هذا ياو.
  • ثم قم بالتدوير حول المحور الجانبي ، الذي يشير إلى اليسار ، بمقدار X. انها الملعب.
  • وأخيرًا ، قم بالتدوير حول المتجه الأمامي بمقدار Z لتطبيق لفة.

لتطبيق هذه التدويرات ، نحتاج إلى مضاعفة الأرباع التي تم إنشاؤها حسب المحور والزاوية مع دوران الكاميرا الحالي. أخيرًا ، قمنا بتطبيق الرباعي الناتج على الجسم في محاكاة الفيزياء.


إيجاد الزاوية بين نقطتين

بادئ ذي بدء ، أقوم ببعض المعلومات الخلفية الرياضية لبرنامج أقوم بإنشائه.

ما أريد تحقيقه هو النقطة الموجودة على جسم يدور باتجاه مكان الماوس. كما هو الحال في ألعاب الدبابات ، حيث يتم تدوير البرج اعتمادًا على mouseX و mouseY

فيما يتعلق بالبرمجة ، يمكن تحقيق ذلك باستخدام دالة atan2 ، التي تُرجع زاوية بين نقطتين (على ما أعتقد).

ما أريد القيام به هو العثور على الزاوية بين الكائن والنقر بالماوس.

هل هناك معادلة رياضية خاصة لهذا؟ لأن بحثي على google يجلب "atan2" منذ أن أصبحت مبرمجًا. نظرًا لأن معظم اللغات لها مكتبة رياضية خاصة بها ، فهي عبارة عن تجريد. أريد أن أعرف كيف تعمل الصيغة في الرياضيات.

السؤال هو، ما هي الصيغة المطلوبة لإيجاد الزاوية بين نقطتين. لذلك يمكن أن يدور موضوعي باتجاه موضعي mouseX و mouseY


2 إجابات 2

الآن إذا فكرت في مجموعة معينة من التدوير (لنقل X أولاً ، ثم Y ، ثم Z) ، مع زوايا Tait-Bryan المقابلة --- a و b و c. ستكون مصفوفة التناوب الخاصة بي على النحو التالي.

انظر إلى تلك المجموعة. إنه من الشكل $ start 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> $ يعتمد على $ b $ فقط: $ a_ <13> = sin (b) $. يمنحك هذا فورًا الزاوية $ b $: $ b = arcsin (a_ <13>) $. نظرًا لأن $ cos b $ غير سالب لـ $ b $ في $ [- pi / 2، pi / 2] $ ، نطاق Arcsine (x) ، يمكن استخدام قوس ظل الوسيطتين لحساب الزوايا $ a $ و $ c $: $ a = operatorname(-a_ <23>، a_ <33>) $ و $ c = operatorname(-a_ <12>، a_ <11>) $.

التحديث: قفل Gimbal

ما ورد أعلاه غير مكتمل. افترض أن $ cos b $ يساوي صفرًا. يحدث هذا عندما يكون $ b = pm frac pi 2 $ ، مما يجعل $ sin b = pm 1 $. تأخذ المصفوفة أحد الشكلين التاليين في هذه الحالات.

عندما $ sin b = -1 $ ، تصبح المصفوفة $ start 0 & amp 0 & amp -1 phantom <-> sin (ac) & amp phantom <-> cos (ac) & amp phantom <-> 0 phantom <-> cos (ac) & amp - sin (ac) & amp phantom <-> 0 end$

عندما يكون $ sin b = 1 $ ، تصبح المصفوفة $ begin 0 & amp 0 & amp phantom <-> 1 phantom <-> sin (a + c) & amp phantom <-> cos (a + c) & amp phantom <-> 0 - cos ( a + c) & amp phantom <-> sin (a + c) & amp phantom <-> 0 end$

لاحظ أنه في كلتا الحالتين ، ستنتج أزواج $ (a، c) $ المتعددة نفس المصفوفة. عندما يكون $ sin b = -1 $ ، كل ما يمكن استنتاجه من المصفوفة هو الفرق $ a-c $: $ tan (a-c) = frac >> $ في هذه الحالة من قفل gimbal. عندما يكون $ sin b = 1 $ ، كل ما يمكن استنتاجه هو المجموع $ a + c $: $ tan (a + c) = frac >> $ في هذه الحالة الأخرى من قفل gimbal. في كلتا الحالتين ، تُفقد القدرة على تحديد $ a $ و $ c $ بشكل فريد. يتمثل أحد الحلول في ضبط إحدى هاتين الزاويتين على صفر بشكل عشوائي. من الأنسب تعيين $ c = 0 $ لأنه يمكن حساب $ a $ على أنه $ a = operatorname(a_ <21>، a_ <22>) $ في كلتا الحالتين.


2 إجابات 2

يبدو أن كلا الإطارين متصلان بالمستجيب النهائي عند النقطة P ، ويتم إزاحتهما بزاوية ثابتة $ beta $. لذلك ليس عليك حقًا التفكير في معلمات D-H للإجابة على هذا السؤال - فقط قم بإجراء تقييم بسيط لمصفوفة التناوب.

فكيف هي الإطارات ، $ F_2 $ = $ [ hat قبعة قبعة] ^ T $ و $ F_e $ = $ [ hat قبعة قبعة] ^ T $ ، ذات الصلة؟ حسنًا ، من الرسم البياني أعلاه ، لدينا العلاقات التالية:

$ قبعة = كوس بيتا قبعة + خطيئة بيتا قبعةقبعة $ $ = كوس بيتا قبعة - الخطيئة بيتا هاتقبعة $ $ = - قبعة$

لاحظ أن $ hatنقاط $ في الصفحة و $ hatنقاط $ خارج الصفحة.

ثم هل ترى كيف أن مصفوفة الدوران أعلاه تخرج من ذلك؟ بوضوح،

تسمى مصفوفة الدوران أيضًا مصفوفة جيب التمام للمخرج. عناصر مصفوفة الدوران هي جيب التمام لناقلات الوحدة لنظامي إحداثيات معنيين. يمكنك العثور على شرح أكثر عمومية هنا.

دع الزاوية $ (e_ <2، i>، e_) يشير $ إلى الزاوية بين الزاوية بين متجه الوحدة على المحور i للإطار المرجعي الثابت ومتجه الوحدة للمحور j للإطار المستدير.

في حالتك نحدد أن:

يُترجم هذا إلى زاوية $ 90 ^ circ $ بين متجهات الوحدة لمحوري x.

هذا يترجم إلى زاوية $ 90 deg $ بين متجهات الوحدة لمحور y للإطار المرجعي والمحور x للإطار المستدير.

هذا يترجم إلى زاوية $ 180 ^ circ $ بين متجهات الوحدة لمحاور z للإطار المرجعي والمحور x للإطار المستدير.

وبالمثل بالنسبة لجميع عناصر المصفوفة الأخرى ، ولكن إليك العناصر الأكثر إثارة للاهتمام:

هذا يترجم إلى زاوية $ beta ^ circ $ بين متجهات الوحدة لمحور y للإطار المرجعي والمحور y للإطار المستدير.

هذا يترجم إلى زاوية $ beta ^ circ $ بين متجهات الوحدة لمحاور z للإطار المرجعي والمحور x للإطار الذي تم تدويره.

cos $ ( زاوية ((e_ <2، y>، e_)) = -sin ( beta) $

هذا يترجم إلى زاوية $ beta + 90 ^ circ $ بين متجهات الوحدة لمحور y للإطار المرجعي والمحور z للإطار الذي تم تدويره.


يمكنك الحصول على زاوية الدوران: $ 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)> $

لذلك ، بالنظر إلى مشكلتك الأولى: $ R = start 0 & أمبير 1 & أمبير 0 -1 & أمبير 0 & أمبير 0 0 & أمبير 0 & أمبير 1 نهاية \ $

$ theta = cos ^ <-1> يسار [0.5 (0 +0 +1 - 1) يمين] ثيتا = 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 = فارك <-1 - 1> <2 sin (90 ^ < circ>)> n_x = 0 n_y = 0 n_z = -1 $ So يمكنك أن ترى هنا ، بالنسبة لمشكلتك الأولى ، أنك تدور 90 درجة حول المحور -z ، أو بشكل مكافئ ، تقوم بتدوير 90 درجة حول المحور + z.

وبالمثل ، بالنسبة إلى مشكلتك الثانية: $ R = begin 0 & أمبير 0 & أمبير 1 1 & أمبير 0 & أمبير 0 0 & أمبير 1 & أمبير 0 نهاية \ $

$ ثيتا = cos ^ <-1> يسار [0.5 (0 +0 + 0-1) يمين] ثيتا = 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 = فارك <1 - 0> <2 sin (120 ^ < circ>)> n_x = 0.577 n_y = 0.577 n_z = 0.577 $

هنا لديك محور دوران هو x = y = z = 0.577 (ولكن يمكن تغيير حجمه ، على سبيل المثال ، x = y = z = 1 ، فقط للتفكير في طبيعة الدوران) ، ثم قم بالتدوير +120 درجات حول هذا المحور.

آمل أن يساعدك هذا ، يرجى التعليق إذا تركت شيئًا غير واضح.

بالنسبة للمبتدئين ، فإن منتج مصفوفات التدوير ليس فريدًا.

يمكن تحقيق أي اتجاه من خلال تكوين ثلاث دورات عنصرية

لاستعادة مجموعة من زوايا الدوران ، ستحتاج إلى البدء بمصفوفة الدوران الكاملة ثم العمل للخلف. لنلق نظرة على التناوب 3-2-1.

$ > $ = $ left ( begin 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 حق) $

يمكننا الآن حل مشكلة $ theta $. يمكن استخدام هذا لحل مشكلة $ psi $ و $ phi $. بالنظر إلى مصفوفة $ ^ aR_c $ ، يمكننا العثور على $ theta $ is $ - frac < pi> <2> $ ، $ psi $ is $ - frac < pi> <2> $ ، و $ phi $ هو 0.

لحل الحالات الفردية ، إذا كنت لا تريد الكتابة بنفسك ، يمكنك إدخال المصفوفة في هذه الحاسبة عبر الإنترنت لتنسيقات الدوران ثلاثية الأبعاد ، وتبديل الإخراج إلى درجات ، ومشاهدة إخراج زاوية المحور.

في حالة $ <> ^ aR_c $ ، فإنه ينتج دوران 120 درجة حول المحور [0.5773503 ، 0.5773503 ، 0.5773503].

ضع في اعتبارك مصفوفة تناوب عشوائية $ bf R $ $ in $ SO (3). يمكننا استخدامه لتحويل المتجه $ v in < mathbb R> ^ 3 $ by $ w = < bf R> v $ حدسيًا ، إذا كان $ v $ يتوافق مع محور الدوران $ bf R $ فسيكون كذلك لا يتغير بالدوران ، أي $ w = v $.

لذلك يجب أن يكون محور الدوران متجهًا ذاتيًا بقيمة $ bf R $. نظرًا لأن $ bf R $ عبارة عن مصفوفة 3x3 ، فلديها 3 متجهات ذاتية. لكل eigenvector قيمة ذاتية مرتبطة: هناك دائمًا قيمة ذاتية واحدة على الأقل تساوي 1 (أي أن طول المتجه لم يتغير بالدوران) ، وبالنسبة للدوران غير الصفري ، فإن قيمتي eigenvalue الأخرى عبارة عن زوج مترافق معقد. المتجه الذاتي المقابل لقيمة eigenvalue التي تساوي واحدًا هو محور الدوران.

مثال بسيط في MATLAB

وهو دوران بمقدار 0.3 راديان حول المحور الصادي (هذه الوظيفة مأخوذة من Robotics Toolbox for MATLAB).

حيث x هي مصفوفة أعمدتها هي المتجهات الذاتية ، و e هي مصفوفة قطرية من قيم eigenvalues. توجد قيمة eigenvalue للوحدة في العمود 3 ، لذا فإن محور الدوران لدينا هو العمود الثالث من x وهو حقيقي ويساوي $ [0 ، 1 ، 0] ^ T $ وهو متجه وحدة موازٍ للمحور y و mdash المحور الأصلي من التناوب.

تخبرك قيم eigenvalues ​​المعقدة بمقدار الدوران حول المحور

يحتوي Toolbox على وظيفة تقوم بكل هذا من أجلك

للذهاب في الاتجاه المعاكس ، من محور الدوران والزاوية ، إلى مصفوفة الدوران ، استخدم صيغة رودريغز. يتم توفير هذا في Toolbox كـ


شاهد الفيديو: اجمل طريقه لصيد السمك العائم وعمل العياشه