PDA

View Full Version : یه مشکل در رابطه با رسم دایره



ervin_maleki
سه شنبه 17 فروردین 1395, 17:53 عصر
سلام من میخواسم دور یه دایره به قطر 300
60 دایره به قطر 16 بکارم یعنی دور تا دور دایره اول که قطرش 300 هست 60 دایره با قطر 16 رسم بشه چگونه اون 60 تا دایره رو با کد دور تا دور دایره اول بچینم؟!

rasol_afkham
سه شنبه 17 فروردین 1395, 19:53 عصر
// زاویه هایی که دایره های کوچک در راستای آنها ترسیم می شوند
double r = 0.0;
// مرکز دایره بزرگ
Point CenterBig = new Point(150, 150);
// مرکز دایره کوچک
Point CenterTiny = new Point(150, 150);
for (int i = 0; i < 60; i++)
{

r += 6.0;
double x = 0.0;
double y = 0.0;
if (i < 15)
{
x = 165.0 * Math.Cos((r * 3.1415926535897931) / 180.0);
y = 165.0 * Math.Sin((r * 3.1415926535897931) / 180.0);
CenterTiny = new Point(CenterBig.X + x - 8, CenterBig.Y - y - 8); double y = 0.0;
}
else if (i < 30)
{
y = 165.0 * Math.Cos(((r - 90) * 3.1415926535897931) / 180.0);
x = 165.0 * Math.Sin(((r - 90) * 3.1415926535897931) / 180.0);
CenterTiny = new Point(CenterBig.X - x - 8, CenterBig.Y - y - 8);
}
else if (i < 45)
{
x = 165.0 * Math.Cos(((r - 180) * 3.1415926535897931) / 180.0);
y = 165.0 * Math.Sin(((r - 180) * 3.1415926535897931) / 180.0);
CenterTiny = new Point(CenterBig.X - x - 8, CenterBig.Y + y - 8);
}
else if (i < 60)
{
y = 165.0 * Math.Cos(((r - 270) * 3.1415926535897931) / 180.0);
x = 165.0 * Math.Sin(((r - 270) * 3.1415926535897931) / 180.0);
CenterTiny = new Point(CenterBig.X + x - 8, CenterBig.Y + y - 8);
}



در این قسمتها Math.Cos(((r - 270) * 3.1415926535897931) / 180.0)
چون کلاس Math زاویه را رادیان در نظر می گیرد کافیست با یک ضرب و یک تقسیم آن را به درجه تبدیل کنیم
x - فاصله افقی از مرکز دایره بزرگ تا مرکز دایره های کوچک است
y - فاصله عمودی از مرکز دایره بزرگ تا مرکز دایره های کوچک است
در انتها هم x و هم y منهای 8 شده اند. 8 شعاع دایره کوچک است برای اینکه دایره های کوچک از لبه دایره بزرگ کمی فاصله داشته باشند.

ervin_maleki
سه شنبه 17 فروردین 1395, 19:58 عصر
دوست عزیز صمیمانه از اینکه وقت گذاشتید و مشکل منو حل کردین سپاس گذارم