سؤال

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

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

ليس من الصعب حساب المتجه الترجمي:إنه نصف ناقل السرعة.ومع ذلك، فإن مصفوفة الدوران بعيدة المنال للغاية بالنسبة لي.نظرا لمتجه الاتجاه <x, y, z>, ، ما هي المصفوفة التي أحتاجها؟

تحرير 1: ينظر؛إذا لم تفهم السؤال، فمن المحتمل أنك لن تتمكن من إعطائي إجابة.

وهنا ما لدي حاليا:

                    Vector3f translation = new Vector3f();
                    translation.scale(1f/2f, body.velocity);

                    Vector3f vec_z = (Vector3f) body.velocity.clone();
                    vec_z.normalize();

                    Vector3f vec_y; // reference vector, will correct later
                    if (vec_z.x == 0 && vec_z.z == 0) {
                        vec_y = new Vector3f(-vec_z.y, 0f, 0f); // could be optimized
                    } else {
                        vec_y = new Vector3f(0f, 1f, 0f);
                    }
                    Vector3f vec_x = new Vector3f();
                    vec_x.cross(vec_y, vec_z);
                    vec_z.normalize();

                    vec_y.cross(vec_x, vec_z);
                    vec_y.normalize();
                    vec_y.negate();

                    Matrix3f rotation = new Matrix3f(
                        vec_z.z, vec_z.x, vec_z.y,
                        vec_x.z, vec_x.x, vec_x.y,
                        vec_y.z, vec_y.x, vec_y.y
                    );

                    arrowTransform3D.set(rotation, translation, 1f);

القائم قبالة من هذا المقال.ونعم، لقد جربت مصفوفة التدوير القياسية (vec_x.x، vec_y.x، إلخ) ولم تنجح.لقد قمت بتدوير الأعمدة والصفوف لمعرفة ما إذا كان هناك أي تأثير.

تحرير 2:

أعتذر عن الصياغة الوقحة لتعليقاتي.

لذا يبدو أنه كان هناك مزيج من خطأين؛أحدها أشار إليه House MD (تسمية المتغيرات بشكل سيء حقًا: vec_z كان في الواقع vec_y, ، وما إلى ذلك)، والآخر هو أنني كنت بحاجة إلى قلب المصفوفة قبل تمريرها إلى محرك العرض (كان النقل قريبًا!).وبالتالي فإن الكود المعدل هو:

                    Vector3f vec_y = (Vector3f) body.velocity.clone();
                    vec_y.normalize();

                    Vector3f vec_x; // reference vector, will correct later
                    if (vec_y.x == 0 && vec_y.z == 0) {
                        vec_x = new Vector3f(-vec_y.y, 0f, 0f); // could be optimized
                    } else {
                        vec_x = new Vector3f(0f, 1f, 0f);
                    }

                    Vector3f vec_z = new Vector3f();
                    vec_z.cross(vec_x, vec_y);
                    vec_z.normalize();

                    vec_x.cross(vec_z, vec_y);
                    vec_x.normalize();
                    vec_x.negate();

                    Matrix3f rotation = new Matrix3f(
                        vec_x.x, vec_x.y, vec_x.z,
                        vec_y.x, vec_y.y, vec_y.z,
                        vec_z.x, vec_z.y, vec_z.z
                    );
                    rotation.invert();
هل كانت مفيدة؟

المحلول

مغفل.

السؤال هنا يتضمن الحصول على دوران لمحور معين، بينما أنا مهتم بالحصول على مصفوفة دوران.

يا إلهي، أتساءل عما إذا كان بإمكانك التحول تحويل واحد إلى الآخر?

راجع للشغل، الحل الحالي الخاص بك لاختيار محور y التعسفي ثم إعادة التقويم يجب أن يعمل بشكل جيد؛على الرغم من ذلك، يبدو أنه مشوب بالتنصت، أو على الأقل مكتوب بشكل سيء.'z_vec' ليس اسمًا متغيرًا جيدًا للمحور y.ما الأمر مع الترتيب 'z,x,y' على أية حال؟

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

تبدو أيضًا نبرة صوتك وقحة نوعًا ما، نظرًا لأنك تطلب من الغرباء قضاء وقتهم في مساعدتك.

نصائح أخرى

هذا يجب أن تفعل لك

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top