كيف يمكن تحويل الاحداثيات على مربع الإحداثيات على الدائرة ؟

StackOverflow https://stackoverflow.com/questions/1621831

  •  06-07-2019
  •  | 
  •  

سؤال

أنا النامية إيندي لعبة فيديو, و كانت تعمل تحت افتراض لأن thumbstick على وحدة تحكم دائرية واسعة من الحركة ، فإنه يعود "التعميم" إحداثيات ؛ التي هي الإحداثيات الديكارتية مقيدة إلى منطقة دائرية (نصف قطرها 1).في الواقع ، فإن الإحداثيات "مربع";مثلا أعلى اليمين thumbstick موقف يسجل مثل x=1,y=1.تحويل الإحداثيات من ديكارت إلى القطبية, حجم يمكن أن تتجاوز 1 - التي لديها تأثير أن لاعب يمكن أن تتحرك بشكل أسرع قطريا من أنها يمكن أن عموديا أو أفقيا.

لذا, توضيح, أريد أن أسجل موقف التناظرية thumbstick من حيث الاتجاه و الحجم ، حيث الحجم بين 0 و 1.على thumbstick بإرجاع إحداثيات على مربع الطائرة ، لذلك ببساطة تحويل الإحداثيات من ديكارت إلى القطبية ليست كافية.أعتقد أنني بحاجة إلى تحويل تنسيق الفضاء, ولكن هذا هو طريق الضغط على حدود بلدي قرد الدماغ.

هل كانت مفيدة؟

المحلول

رسم خريطة لساحة لدائرة و. وهناك أيضا التصور لطيفة لرسم الخرائط. يمكنك الحصول على:

xCircle = xSquare * sqrt(1 - 0.5*ySquare^2)
yCircle = ySquare * sqrt(1 - 0.5*xSquare^2)

نصائح أخرى

الخرائط ليست فريدة من نوعها.هناك العديد من الحلول الأخرى على هذا السؤال.

على سبيل المثال, هذا التعيين سوف تعمل أيضا

u = x √(x2 + y2 - x2y2) / √(x2 + y2)

v = y √(x2 + y2 - x2y2) / √(x2 + y2)

حيث (u,v) هي دائرية القرص الإحداثيات (x,y) هي مربع الإحداثيات.

صورة تساوي ألف كلمة, حتى هنا بعض الصور لتوضيح عدم تفرد رسم الخرائط ومعكوس.

circular Brady bunch


squared Boston Celtics

For a C++ implementation من هذه الخرائط ، انتقل إلى
http://squircular.blogspot.com/2015/09/fg-squircle-mapping.html
انظر http://squircular.blogspot.com لمزيد من الصور من رسم النتائج.

انظر أيضا "أساليب تحليلية عن تربيع القرص" ورقة مناقشة مختلف رسم المعادلات مع البراهين و الاشتقاقات.

وتقسيم كل قيمة من حجم لتطبيع جميع القيم إلى متجه الوحدة، منها مثلا.

magn = sqrt(x * x + y * y);
newx = magn > 1.0 ? x / magn : x;
newy = magn > 1.0 ? y / magn : y;

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

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