الفلك

مشاكل في حساب مواقع الكواكب X و Y و Z في وقت معين في Unity3D (C #)

مشاكل في حساب مواقع الكواكب X و Y و Z في وقت معين في Unity3D (C #)


We are searching data for your request:

Forums and discussions:
Manuals and reference books:
Data from registers:
Wait the end of the search in all databases.
Upon completion, a link will appear to access the found materials.

أحاول إنشاء برنامج صغير في Unity3D يضع الكواكب في مساحة ثلاثية الأبعاد في وقت معين. لقد اتبعت هذا المستند: http://stjarnhimlen.se/comp/ppcomp.html.

باستخدام البيانات من القسم 4 والرمز من القسم 6 و 7 ، هل يجب أن يكون لدي الخوارزمية الصحيحة؟ لقد تخطيت التغييرات في السمات المدارية (على سبيل المثال + 4.70935E-5 * d) لأنني أريد فقط أن أجعلهم يتحركون في مدار محدد. لا أحتاجها حقًا للتغيير بمرور الوقت. في الوقت الحالي ، أقوم فقط بزيادة متوسط ​​الانحراف بمرور الوقت دون أخذ الفترة الزمنية في الاعتبار.

تكمن المشكلة في أن الكواكب لا يبدو أنها تحصل على الإزاحة الصحيحة لمسير الشمس ، وحركتها غريبة حقًا: فهي تتسارع ، ثم تبطئ وتعكس مسارها. إليك مقطع فيديو لحركتهم: https://www.youtube.com/watch؟v=zHOBChFpan0

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

باستخدام UnityEngine ؛ باستخدام النظام ؛ فئة عامة Orbit: MonoBehaviour {public float longitudeOfTheAscendingNode؛ ميل العائمة العامة ؛ حجة التعويم العامةOfPerihelion ؛ تعويم شبه عام عوامة عامة غريب الأطوار. متوسط ​​التعويم العام: السرعة الشاذة = 0.1f ؛ تعويم M = 0 ؛ // يعني شذوذ باطل تحديث () {SetPosition () ؛ } باطل SetPosition () {float N = longitudeOfTheAscendingNode ؛ تعويم أنا = ميل ؛ تعويم w =umentsOfPerihelion ؛ تعويم a = semimajorAxis ؛ تعويم e = الانحراف ؛ تعويم E = M + e * (180 / Mathf.PI) * Mathf.Sin (M) * (1 + e * Mathf.Cos (M)) ؛ تعويم xv = a * (Mathf.Cos (E) - e) ؛ تعويم yv = a * (Mathf.Sqrt (1 - e * e) * Mathf.Sin (E)) ؛ تعويم v = Mathf.Atan2 (yv، xv) ؛ تعويم r = Mathf.Sqrt (xv * xv + yv * yv) ؛ تعويم xx = r * (Mathf.Cos (N) * Mathf.Cos (v + w) - Mathf.Sin (N) * Mathf.Sin (v + w) * Mathf.Cos (i)) ؛ تعويم yy = r * (Mathf.Sin (N) * Mathf.Cos (v + w) + Mathf.Cos (N) * Mathf.Sin (v + w) * Mathf.Cos (i)) ؛ تعويم zz = r * (Mathf.Sin (v + w) * Mathf.Sin (i)) ؛ convert.position = Vector3 جديد (xx ، yy ، zz) ؛ M + = meanAnomalySpeed ​​* Time.deltaTime ؛ إذا (M> 360) M - = 360 ؛ }

}


أعتقد أن E و M بالدرجات في التعليمات البرمجية الخاصة بك ، لكن وظائف حساب المثلثات في ملفالرياضياتمكتبة في C # توقع وسيطة بالراديان.

طريقة واحدة للتعامل مع هذا هو تحديد الثوابتراديان = Pi / 180ودرجات = 180 / بيثم دائما تفعلMathf.Sin (M * راديان). ستحتاج أيضًا إلى القيام بذلك للخطوطتعويم xx =.

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


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

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

النقطة المهمة هي أن خط العرض وخط الطول يعتمدان على دوران الأرض لذا فهي ليست بالقصور الذاتي. أتفهم تمامًا أنك تريد تجنب ذلك.

شكرا لك على الرد السريع :)

- أنا مستجد في Orbital Mechanics وأشياء من هذا القبيل ، لكن يمكنني التعلم بسرعة إذا كان الموضوع يهمني: D

كنت آمل أن تكون الرباعية كافية لتدوير المرحلة الابتدائية ، لحساب المواضع والدرجات منها. (حتى لو كنت أعرف فقط أن الرباعي هو دوران في مساحة ثلاثية الأبعاد)

لست متأكدًا حتى من الإطار المرجعي ، فقد رأيت في بعض صفحات الويكي مستوى مرجعيًا ، كان عبارة عن دائرة حول خط الاستواء. - لم أقم بتعريف واحد: /

لم أسمع بأي من هذه: إطارات مركزية الأرض - مسير الشمس ، وأطر استوائية مركزية الأرض ، ومسير الشمس - ولكن ربما يكون خط الاستواء هو مستوى خط الاستواء الذي رأيته على صفحة الويكي؟ :د

حسنًا ، إنه أبسط بكثير مما يبدو ، ولكنه مهم للغاية إذا كنت تريد التعامل مع x و y و z وتحديد الزوايا.

في الكرة السماوية ، يحدد علماء الفلك خط الاستواء السماوي (إسقاط لخط الاستواء للأرض) ومسير الشمس ، وهو الحركة الواضحة للشمس عبر الكرة خلال العام. بالطبع ، فإن مسير الشمس هو في الأساس إسقاط لمدار الأرض في الكرة الظاهرة ، لذلك عندما نقول & quotthe مستوى مسير الشمس & quot ، فإننا نعني مستوى مدارنا.

النقطة التي يتقاطع فيها مسير الشمس وخط الاستواء السماوي هي الاعتدال الربيعي (مواسم نصف الكرة الشمالي). في الحادي والعشرين من مارس ، هذا هو الموقع الظاهر للشمس في السماء. الخط الفاصل بين هذه النقطة ومركز الأرض هو أيضًا التقاطع بين المستوى الاستوائي ومستوى مسير الشمس.

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

الإطار المرجعي لمركز الشمس ومسير الشمس له أصله في مركز الشمس ، والمحور X يشير إلى الاعتدال الربيعي ، والمحور Y 90 درجة للأمام في اتجاه مدار الأرض ، والمحور Z يشير إلى الشمال عموديًا على المستوى الاستوائي (ليس من قبيل الصدفة مع القطب الشمالي للشمس).

يجعل نظام الإحداثيات المحيطي المستوى XY متطابقًا مع مدار القمر الصناعي. يشير المحور X إلى نقطة الحضيض ، والمحور Y يتقدم بمقدار 90 درجة في اتجاه حركته ويكمل المحور Z قاعدة اليد اليمنى.

مصدر لـ 3 أعلاه: أساسيات الديناميكا الفلكية بقلم بات ومولر ووايت ISBN 0-486-60061-0.

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

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

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

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


1 المقدمة

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

قد تبدو هذه الصيغ معقدة ، لكنني أعتقد أن هذه هي أبسط طريقة لحساب مواقع الكواكب بدقة جيدة إلى حد ما تبلغ حوالي دقيقة قوسية واحدة (= 1/60 درجة). ستؤدي أي تبسيطات أخرى إلى دقة أقل ، ولكن بالطبع قد يكون ذلك جيدًا ، اعتمادًا على التطبيق.


لماذا يحدث الكسوف؟

يحدث كسوف كلي للشمس عندما يكون القمر أمام الشمس من وجهة نظر موقع معين على الأرض. ويحدث أنه في هذه المرحلة من تاريخ الأرض ، يمكن للقمر أن يحجب الشمس لأن قطرها الزاوي في السماء هو نفس القطر الزاوي للشمس تقريبًا (حوالي 0.5 درجة أو 30 دقيقة قوسية).

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

حسنًا ، في الواقع ، في الوضع المماثل لـ Ganymede و Jupiter ، هناك كسوف في كل مرة يتجول فيها Ganymede حول كوكب المشتري (والذي يحدث مرة واحدة تقريبًا في الأسبوع). مثل الأرض ، يقع مدار كوكب المشتري حول الشمس في مستوى معين ("سطح الكسوف"). واتضح أن مدار جانيميد حول المشتري يقع أيضًا في نفس المستوى. لذلك في كل مرة يصل فيها جانيميد إلى وضع "القمر الجديد" (أو ، في لغة علم الفلك الرسمية ، عندما يكون محاذيًا "بشكل متناغم" - يُنطق بـ sizz-ee-gee) ، يكون في المكان المناسب لإلقاء بظلاله على كوكب المشتري والكسوف الشمس أينما حل هذا الظل. (من كوكب المشتري ، يظهر جانيميد حوالي 3 أضعاف حجم الشمس).

لكن قمرنا مختلف. لا يقع مداره في مستوى مسير الشمس. بدلاً من ذلك ، يميل بنحو 5 درجات. (كيف حصل على هذا النحو غير معروف ، ولكن من المفترض أنه مرتبط بكيفية تشكل القمر.) ولكن هذه الدرجة 5 هي ما يجعل الخسوف نادرًا نسبيًا: يمكن أن يحدث فقط عندما يكون هناك "تكوين جديد للقمر" (syzygy) مباشرة في الوقت الذي يمر فيه مدار القمر عبر مستوى مسير الشمس.

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

دعونا الآن نلقي نظرة على ما يحدث على مدار عام تقريبًا. نحن نعرض نقطة لمكان القمر كل يوم. وتكون النقطة أكثر احمرارًا إذا كان القمر أقرب إلى مستوى مسير الشمس في ذلك اليوم. (لاحظ أنه إذا تم رسم هذا على نطاق واسع ، فلن تتمكن من رؤية مدار القمر ، ولن يبدو أنه يتراجع أبدًا كما هو الحال هنا.)

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

والآن يمكننا أن نرى أنه على الأقل في هذه الحالة بالذات ، هناك نقطتان (يشار إليهما بالسهام) حيث يصطف القمر وفي مستوى مسير الشمس (كما هو موضح باللون الأحمر) - وستتوافق هذه النقاط بعد ذلك مع كسوف الشمس .

في السنوات المختلفة ، ستبدو الصورة مختلفة قليلاً ، وذلك أساسًا لأن القمر يبدأ في مكان مختلف في مداره في بداية العام. فيما يلي صور تخطيطية لبضع سنوات متتالية:

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

حسنًا ، كيف تبدو البيانات الحقيقية؟ إليك مخطط لمدة 20 عامًا في الماضي و 20 عامًا في المستقبل ، يوضح الأيام الفعلية في كل عام عندما يحدث كسوف الشمس الكلي والجزئي (تشير النقاط الصغيرة في كل مكان إلى أقمار جديدة):

سبب "الانجراف" بين السنوات المتتالية هو أن الشهر القمري (29.53 يومًا) لا يتماشى مع السنة ، لذلك لا يمر القمر بعدد كامل من المدارات على مدار العام ، مع النتيجة أنه في بداية العام الجديد ، يكون القمر في مرحلة مختلفة. ولكن كما توضح الصورة ، هناك قدر كبير من الانتظام في الأوقات العامة التي يحدث فيها الخسوف - وعلى سبيل المثال ، عادة ما يكون هناك خسوفان في سنة معينة - على الرغم من أنه يمكن أن يكون هناك المزيد (وفي 0.2 بالمائة من السنوات يمكن أن يكون هناك ما يصل إلى 5 ، كما كان في عام 1935).

لمعرفة المزيد من التفاصيل حول الكسوف ، دعنا نرسم الفروق الزمنية (في كسور السنوات) بين جميع كسوف الشمس المتتالية لمدة 100 عام في الماضي و 100 عام في المستقبل:

والآن دعونا نرسم نفس الفروق الزمنية ، ولكن فقط للكسوف الكلي للشمس:

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


الزاوية بين متجهين ثلاثي الأبعاد - مثال

افترض أننا نريد إيجاد الزاوية بين متجهين:

و ب معرف ك

المتجه بين النقطة A = (1 ، 1 ، 2) و B = (-4 ، -8 ، 6).

أولا، حساب المتجه ب، بالنظر إلى النقاط الأولية والنهائية:

ب = [-4 - 1, -8 - 1, 6 - 2] = [-5, -9, 4]

ثم، ابحث عن المنتج النقطي من النواقل أ و ب:

أ & # xB7 ب = (3 * -5) + (6 * -9) + (1 * 4) = -15 - 54 + 4 = -65

التالي، تحديد المقدار عدد النواقل:

أخيرا، استخدم معادلة الضرب النقطي المحولة:

& # x3B1 = arccos [(أ & # xB7 ب) / (|أ| * |ب|)] = arccos [-65 / (6.782 * 11.045)] = arccos (-0.86767) = 150.189 & # x2248 150.2 & # xB0

وها أنت ذا! لقد قمت للتو بحساب الزاوية بين متجهين ثلاثي الأبعاد. تهانينا!


بناء جهاز محاكاة النظام الشمسي

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

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


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

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

المشكلة الثالثة. سأحتاج إلى حقيقة مطلقة للمواقف والسرعات لكل من وقت بداية ونهاية محاكاتي للجماهير التي قررت استخدامها. على حد سواء لبدء كل شيء بشكل واقعي وللتحقق من مدى دقتي. من الناحية المثالية ، الحقيقة الأساسية هي شيء يمكنني الوصول إليه برمجيًا حتى أتمكن بسهولة من تغيير فترة المحاكاة الخاصة بي. يجب أن تكون المواضع / السرعات في إحداثيات x و y و z أو يجب أن تكون قابلة للتحويل في تلك الإحداثيات. لا أهتم بالضرورة إذا كانت "الحقيقة الأساسية" تتطابق تمامًا مع البيانات التاريخية الحقيقية. طالما أن "الحقيقة النهائية" هي نتيجة صحيحة (ضمن الدقة المرغوبة) لـ "حقيقة البداية" بالنظر إلى ما نعرفه ، فإنها تعمل بالنسبة لي.
أفضل مكتبة وجدتها حتى الآن هي https://github.com/mgvez/planet-positions والتي تُستخدم في محاكاة النظام الشمسي jsOrery ، وأنا أستخدمها الآن ، لكنني لست متأكدًا مما إذا كانت قابلة للاستخدام / موثوق بما فيه الكفاية. بالنسبة للمبتدئين ، يحتوي فقط على بيانات للشمس والكواكب والقمر ، لذلك لا يمكنني إضافة أقمار أكبر مثل تيتان إذا ذهبت مع هذا. هل يعرف أي شخص طريقة أفضل للحصول على بيانات الحقيقة الأساسية؟

المشكلة الرابعة. هل تسارع الجاذبية النيوتوني كافٍ في الواقع للدقة المطلوبة؟ هل هناك أي تأثيرات GR أحتاج إلى مراعاتها من أجل الدقة المطلوبة؟ ماذا عن ضغط الإشعاع؟ إضافة سرعة SR؟ أي شيء آخر ربما فاتني؟


حركة الكاميرا

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

مع القليل من البرمجة النصية ، يمكنك الحفاظ على تركيز البحرية.

أولاً ، تأكد من أنك لست في وضع التشغيل - لإيقاف وضع التشغيل ، حدد لعب زر مرة أخرى.

في التسلسل الهرمي ، انقر فوق الزر إنشاء وحدد إنشاء فارغ. أطلق عليه اسما الكاميرا.

الفكرة الأساسية هي أنك تريد أن يمثل CameraMount الموضع الذي يجب أن تركز عليه الكاميرا وأن تكون الكاميرا ذات صلة بهذا الموضع.

في البداية ، تريد أن تركز الكاميرا على مكان وجود البحرية الفضائية ، لذلك دعونا نقوم بتهيئة CameraMount ليكون في نفس الموضع تمامًا مثل Space Marine.

للقيام بذلك ، حدد ملف غواصة فضائية، انقر فوق زر الترس الموجود أعلى يمين مكون التحويل ، وحدد نسخ المكون

ثم حدد ملف الكاميرا، انقر فوق زر الترس في أعلى يمين مكون التحويل ، وحدد قم بلصق قيم المكونات:

بعد ذلك ، اسحب ملف الكاميرا الرئيسية GameObject في الكاميرا GameObject.

رائعة! الآن أثناء قيامك بتحريك المشغل ، يمكنك تحريك CameraMount للتحرك مع المشغل ، وستقوم الكاميرا بتتبع المشغل. تحتاج فقط إلى كتابة نص للقيام بذلك.

مع تحديد CameraMount ، انقر فوق إضافة مكون زر في المفتش وحدد نص جديد. نسميها حركة الكاميرا ثم انقر فوق إنشاء وإضافة.

يجر ملفك الجديد من المستوى الأعلى لمجلد الأصول إلى ملف نصوص مجلد.

نقرتين متتاليتين ال حركة الكاميرا البرنامج النصي لفتحه في محرر التعليمات البرمجية الخاص بك. تحت تعريف الصنف ، أضف المتغيرات التالية:

FollowTarget هو ما تريد أن تتبعه الكاميرا وتتحرك ، السرعة هي السرعة التي يجب أن تتحرك بها. من خلال إنشاء هذه المتغيرات كمتغيرات عامة ، ستسمح لك Unity بتعيين هذه المتغيرات داخل محرر Unity نفسه ، بحيث يمكنك تعيين FollowTarget إلى Space Marine والتلاعب بـ moveSpeed ​​لمحتوى قلبك ، كما سترى قريبًا.

أضف الآن ما يلي إلى Update ():

يتحقق هذا الرمز لمعرفة ما إذا كان هناك هدف متاح. إذا لم يكن الأمر كذلك ، فإن الكاميرا لا تتبع.

بعد ذلك ، يتم استدعاء Vector3.Lerp () لحساب الموضع المطلوب من CameraMount.

تأخذ Lerp () ثلاثة معلمات: موضع البداية في مساحة ثلاثية الأبعاد ، وموضع نهاية في مساحة ثلاثية الأبعاد ، وقيمة بين 0 و 1 تمثل نقطة بين مواضع البداية والنهاية. تُرجع Lerp () نقطة في مسافة ثلاثية الأبعاد بين مواضع البداية والنهاية التي تحددها القيمة الأخيرة.

على سبيل المثال ، إذا تم تعيين القيمة الأخيرة على 0 ، فسيعيد Lerp () موضع البداية. إذا كانت القيمة الأخيرة هي 1 ، فإنها تُرجع الموضع النهائي. إذا كانت القيمة الأخيرة 0.5 ، فإنها ترجع نقطة في منتصف المسافة بين موضع البداية والنهاية.

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

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

مع استمرار تحديد CameraMount في التسلسل الهرمي ، اسحب غواصة فضائية الى اتبع الهدف المجال وضبط سرعة الحركة ل 20.

العب لعبتك لترى ما تغير.

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


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


تحديث

لقد قمت بتحديث الطريقة ConvertToCartesian ، بحيث تأخذ True Anomaly (nu) المحسوبة من وظيفة ConvertToKeplerElements كمدخل. ثم تحسب الانحراف اللامركزي (E) ، ثم تحسب متوسط ​​الشذوذ (Mt) من ذلك. عندما يتم استدعاء ConvertToCartesian في الحلقات اللاحقة ، يتم تحديث Mt بالخطوة الزمنية ذات الصلة. ثم أحسب E مرة أخرى من Mt المحدث ، ثم أحسب nu من E. المحدثة. وهذا يحل معظم الحالات. المشكلة هي ، أحيانًا يتم احتساب nu 180 درجة بعيدًا عن المكان الذي يجب أن يكون فيه ، مما يجعل نقطة البداية للمدار المعروض 180 درجة.

في دالة ConvertToKeplerElements الخاصة بي ، وفقًا للرياضيات ، nu = 2pi - nu if r.v & lt 0. يحدث هذا ، على سبيل المثال ، عندما أضع المتجهات الأولية r ، متجهات بحيث لا تبدأ السفينة عند الذروة أو الانهيار ولكن في مكان ما بينهما. أعلم أن هذا صحيح ، ولكن عندما أحسب nu- & gtE- & gtnu ، يتم فقد هذا التقليب بمقدار 180 درجة في الحساب.

إليك الأجزاء ذات الصلة من الطريقة المحدثة ConvertToCartesian.

ها هي النتيجة السيئة التي أحصل عليها:


إذن ، ما الذي حدث للتو هنا؟

هناك الكثير لنتعلمه عند إعادة النظر في المفاهيم التي "تعلمناها". الرياضيات جميلة ، لكن الأناقة عادة ما تكون مدفونة تحت البراهين الميكانيكية وجدار المعادلات. لا نحتاج إلى المزيد من البراهين ، فنحن بحاجة إلى نتائج شيقة وبديهية.

على سبيل المثال ، نظرية فيثاغورس:

  • يعمل من أجل أي شكل، وليس مجرد مثلثات (مثل الدوائر)
  • يعمل من أجل أي معادلة مع المربعات (مثل 1/2 م ع 2)
  • يعمم ل أي عدد من الأبعاد (أ 2 + ب 2 + ج 2 + ...)
  • الإجراءات أي نوع من المسافة (أي بين الألوان أو تفضيلات الفيلم)

ليس سيئًا للغاية بالنسبة لنتيجة عمرها 2000 عام ، أليس كذلك؟ هذا أمر شديد التفكير ، لذا سأنتهي هنا اليوم (المقالة السابقة لها استخدامات أكثر). رياضيات سعيدة.