PDA

View Full Version : سوال: حرکت حول مدار بیضی شکل



ahmads
جمعه 19 شهریور 1389, 08:49 صبح
سلام


ممنون میشم اگه کسی از دوستان راهنمایی کنه که چطور میتونم یک shape رو حول یک مدار بیضی شکل حرکت بدم

ahmads
شنبه 20 شهریور 1389, 17:18 عصر
ببخشید که دوباره میپرسم، کسی در این زمینه نمیتونه راهنمایی کنه ؟

saeid5977
شنبه 20 شهریور 1389, 17:40 عصر
سلام
باید x,y محل رسم شکل رو روی بیضی حرکت بدی. و برای این کار باید از معادله بیضی استفاده کنی. معادله بیضی تو مختصات قطبی به شکل زیر هست با دادن t از صفر تا 2*PI نقاط روی بیضی به دست میاد. a و b هم شعاعهای بیضی هستند.

x = a*cos t
y = b*sin t


پس شما یک حلقه مینویسی که t رو هر بار زیاد میکنه و شکل مورد نظر رو تو x,y به دست آمده رسم میکنه. فواصل بین t ها هم فاصله محل رسم جدید با قبلی رو مشخص میکنه. با نگه داشتن مقدار قبلی x,y هم میتونی شکل قبلی رو پاک کنی و بعد شکل جدید رو رسم کنی.

mohammadmbs
شنبه 20 شهریور 1389, 17:51 عصر
آقا سعید درست میگن ولی این روش مناسب "رسم بیضیه" نه حرکت به شکل بیضی. میتونید به روش زیر Shape1 رو حرکت بدید:

یه Timer بسازید Interval اون رو بذارید مثلا یک. کد زیرو وارد کنید:


Dim A As Single

Private Sub Timer1_Timer()

A = A + 0.1

Shape1.Left = 3000 + 1400 * Cos(A)
Shape1.Top = 3000 + 1000 * Sin(A)

End Sub


حالا shape1 حرکت بیضی شکل انجام میده.

بیضی یک شعاع عمودی داره و یک شعاع افقی که در دایره این دو شعاع با هم برابرند.

عدد 1400 که در Cos ضرب شده شعاع افقی بیضیه.
عدد 1000 که در Sin ضرب شده شعاع عمودی بیضیه.

A اندازه ی زاویه ایه که shape1 طی میکنه. این زاویه برحسب رادیانه یعنی 3.14 اون میشه 180 درجه ی خودمون.

اگه خواستید A رو بر حسب درجه وارد کنید باید به جای Cos(A) بنوسید Cos(A/3.14*180) وبه جای Sin(A) بنویسید Sin(A/3.14*180)
در این صورت بهتره در خط "A = A + 0.1" هم به جای 0.1 بنویسید 0.001

*موفق باشید*

saeid5977
شنبه 20 شهریور 1389, 18:09 عصر
نمی دونم چرا اینطور استنباط کردین که این روش برای رسم بیضی هستش اما اگر اینطور باشه هم رسم بیضی حاصل حرکت یک نقطه روی معادله بیضیه حالا به جای نقطه ایشون میتونن از شکل مورد نظر اشتفاده کنند.
پاسخ کلی استفاده از معادله بیضی هستش حالا اینکه ایشون چطور میخوان انیمیشن ایجاد کنند بر میگرده به روشی که مناسب هست براشون.
موفق باشید

ahmads
شنبه 20 شهریور 1389, 20:03 عصر
خیلی ممنون دوستان بابت راهنماهاتون ، روش ترسیم دایره رو قبلا نوشته بودم حالا که راهنمایی های شما رو دیدم متوجه تفاوت حرکتش با دایره شدم بنابراین تو این قبلی یه تغییراتی دادم که نتیجش به این صورت میشه :
Dim Alpha As Single
Const PI = 3.14

Private Sub Form_Load()
ScaleMode = 7
Me.Height = 3270
Me.Width = 5385
Timer1.Interval = 1
End Sub

Private Sub Timer1_Timer()
Alpha = Alpha + 0.01
If Alpha >= 2 * PI Then Alpha = 0
Shape1.Move 4 + 4 * Cos(Alpha), 2 + 2 * Sin(Alpha)
End Sub
بازم تشکر میکنم بابت راهنمایهاتون