سؤال

أنا أتطور في التطبيق في XNA الذي يرسم مسارات عشوائية. لسوء الحظ ، أنا بعيد عن الرسوم البيانية ، لذلك أنا عالق بعض الشيء. يحتاج طلبي إلى القيام بما يلي:

  1. اختر زاوية عشوائية من أصل بلدي (0،0) ، وهو أمر بسيط.
  2. ارسم دائرة فيما يتعلق بهذا الأصل ، 16 بكسل بعيدًا (أو أي مسافة أحددها) ، بالزاوية الموجودة أعلاه.

(عذرًا من الفوتوشوب الرهيب)

alt text http://www.refuctored.com/coor.png

تمثل الدائرة الثانية في (16،16) زاوية 45 درجة 16 بكسل بعيدًا عن أصلها.

أرغب في الحصول على طريقة أعمر فيها مسافة وزاوية تُرجع نقطة إلى الرسم البياني. بمعنى آخر

private Point GetCoordinate(float angle, int distance)
{
   // Do something.
   return new Point(x,y);
}

أعلم أن هذا بسيط ، لكن Agian ، أنا بعيدًا عن الاتصال بالرسوم البيانية. أي مساعدة؟

شكرا يا جورج

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

المحلول

إذا كانت الزاوية بدرجات ، فلا أولاً:

angle *= Math.PI / 180;

ثم:

return new Point(distance * Math.Cos(angle), distance * Math.Sin(angle));

بالمناسبة ، فإن النقطة في (16 ، 16) ليست 16 بكسل من الأصل ، ولكن SQRT (16^2 + 16^2) = SQRT (512) = ~ 22.63 بكسل.

نصائح أخرى

private Point GetCoordinate(float angle, int distance)
{
  float x = cos(angle) * distance;
  float y = sin(angle) * distance;
  return new Point(x, y);
}

لاحظ أن الوظائف المثلثية ربما تأخذ الراديان. إذا كانت زاويةك بدرجات ، فقس على 180/PI.

على العموم:

x = d * cos(theta)
y = d * sin(theta)

حيث D هي المسافة من الأصل والثيتا هي الزاوية.

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

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