امتیاز موضوع:
  • 1 رأی - میانگین امتیازات: 4
  • 1
  • 2
  • 3
  • 4
  • 5
ساعت آنالوگ
نویسنده پیام
Ghoghnus آفلاین
مدیر بخش
*****

ارسال‌ها: 1,506
موضوع‌ها: 277
تاریخ عضویت: آذر ۱۳۸۸

تشکرها : 1655
( 3939 تشکر در 1454 ارسال )
ارسال: #1
ساعت آنالوگ
برنامه زیر برنامه ساعت آنالوگ و عقربه ای است :

توجه شود که خود ساعت ، عقربه هایش عکس هستند و عکس ها Transparent هستند .

برای طراحی عقربه ها چون anchor در #C به صورت Top و Left است ، در هنگام طراحی عکس ها ، عقربه

ها باید به سمت چپ ترین یال عکس بچسبند، یعنی باید در گوشه قرار بگیرند :

عقربه هم به همین شکل بالا در گوشه سمت چپ عکس قرار گرفته اند.

برای پیدا کردن میزان چرخش باید دقت شود.

برای پیدا کردن چرخش دقیقه شمار :

می خواهیم 60 دقیقه را در یک دایره 360 درجه ای قرار دهیم ، پس با تقسیم 360 بر 60 ، خواهیم دانست

که هر دقیقه به 6 درجه چرخش نیاز دارد.

برای پیدا کردن چرخش ثانیه شمار :
این ثانیه شمار باید ، در یک دقیقه 60 بار بچرخد ، کلا باید 360 درجه بچرخد ، پس با تقسیم 360 بر 60

می فهمیم که ، به ازای یک ثانیه ، باید 6 درجه بچرخد .

برای پیدا کردن چرخش ساعت شمار :

ساعت شمار که واضح است باید به ازای هر ساعت 30 درجه بچرخد .چون در صفحه 12 ساعت داریم.

پس با تقسیم 360 بر 12 می فهمیم که باید 30 درجه به ازای هر ساعت چرخید. اما ساعت شمار

به صورت آرام آرام با دقیقه شمار تغییر میکند ، مثلا ساعت اگر 8:56 باشد ، ساعت شمار باید خیلی نزدیک

به عدد 9 باشد، پس ما باید ، پارامتری دیگر برای دقیق کردن چرخش ساعت شمار در نظر بگیریم.

ما باید میزان تغییر ساعت شمار را به ازای یک دقیقه نیز بدست بیاوریم و به چرخش اضافه کنیم.

برای اینکار ، می دانیم که 12 ساعت برابر با 720 دقیقه است . 720 دقیقه را میخواهیم در 360 درجه

جای دهیم ، پس با تقسیم 360 بر 720 می دانیم که ساعت شمار به ازای هر دقیقه ، نیم درجه چرخش دارد.

که این میزان باید به چرخش اصلی ساعت شمار اضافه گردد.

پس برای بدست آوردن چرخش ها :
کد:
private void timer1_Tick(object sender, EventArgs e)
{
  theta_second = (int)DateTime.Now.Second * 6;

  theta_minute = (int)DateTime.Now.Minute * 6;

  theta_hour = (int)DateTime.Now.Hour * 30 +
            (int)DateTime.Now.Minute / 2;

  this.Invalidate();
}
و برای مثال برای چرخش عقربه ثانیه داریم :
کد:
int x = center_x;
int y = center_y;
second_hand = Properties.Resources.second_hand;
e.Graphics.TranslateTransform(x, y);
e.Graphics.RotateTransform(theta_second - 180);
e.Graphics.TranslateTransform(-x, -y);
e.Graphics.DrawImage(second_hand, new Point(center_x, center_y));
second_hand.Dispose();
همگان می دانیم که کد بالا ، مرکز دوران را به وسط فرم می آورد و به اندازه تتا میچرخاند و چون در فرم ،

مختصات بر عکس میباشد ، یک flip با کم کردن 180 از theta انجام میدهیم.

نکته : متد this.Invalidate رویداد Paint را فراخوانی میکند.


فایل‌(های) پیوست شده
.zip   Analog_Clock.zip (اندازه: 81.15 KB / تعداد دفعات دریافت: 53)

باور کنیم
همانگونه که در غیبت مقصریم در ظهور موثریم!
نیستیم؟

زیر شمشیر غمش رقص کنان باید رفت #  کان که شد کُشته ی او نیک سرانجام افتاد



 چشمک - بهینه شده برای ورژن جدید دانلود پروژه برنامه نويسي شادی − بهینه شده برای ورژن جدید
  
(آخرین ویرایش در این ارسال: ۱۲-مهر-۱۳۹۲, ۲۲:۲۶:۰۶، توسط babyy.)
۱۲-مهر-۱۳۹۲, ۱۱:۰۱:۵۶
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : ترانسپورتر, omid_phoenix, sharin, behzady, babyy
ترانسپورتر آفلاین
کاربر با تجربه
****

ارسال‌ها: 714
موضوع‌ها: 61
تاریخ عضویت: آبان ۱۳۸۹

تشکرها : 4435
( 3658 تشکر در 1648 ارسال )
ارسال: #2
RE: ساعت آنالوگ
خیلی ممنون ، کاش عکسش رو هم می ذاشتیBiggrin

بعدش ی چیز ؛ کل برنامه همینه؟Amaze
۱۲-مهر-۱۳۹۲, ۱۱:۲۱:۰۲
ارسال‌ها
پاسخ
Ghoghnus آفلاین
مدیر بخش
*****

ارسال‌ها: 1,506
موضوع‌ها: 277
تاریخ عضویت: آذر ۱۳۸۸

تشکرها : 1655
( 3939 تشکر در 1454 ارسال )
ارسال: #3
RE: ساعت آنالوگ
سورس برنامه پیوست شد

باور کنیم
همانگونه که در غیبت مقصریم در ظهور موثریم!
نیستیم؟

زیر شمشیر غمش رقص کنان باید رفت #  کان که شد کُشته ی او نیک سرانجام افتاد



 چشمک - بهینه شده برای ورژن جدید دانلود پروژه برنامه نويسي شادی − بهینه شده برای ورژن جدید
  
۱۲-مهر-۱۳۹۲, ۱۱:۳۰:۴۱
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : ترانسپورتر, behzady, babyy


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  کمک واسه ساعت vpn-buy 7 4,098 ۰۳-آذر-۱۳۸۹, ۰۱:۱۰:۳۲
آخرین ارسال: Amirjavadi65

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS