# Native Code > برنامه نویسی در 6 VB > برنامه نویسی مرتبط با بازی و گرافیک در VB6 > سوال: کشیدن بیضی مورب در ویژوال بیسیک

## mzeus98

سلام دوستان ! 
بعد از یک مدت دوباره فصل امتحانات شدش و ما هم حسابی در فصل گرافیک گیر کرده ایم !
طبق معمول معلممان چند عدد شکل داده است که در یکی از آنها گـیر کرده ام ...
شکل به این صورت است :
Ellipse diagonal.jpg

بنده در کشیدن بیضی مورب مشکل دارم ! 
کد های کشیدن بیضی عمودی و افقی به این صورت هستش : 
Me.Circle (2000, 2000), 500, , , , 0.2
Me.Circle (2000, 2000), 500, , , , 4


ممکنه بهم کمک بکنید ! ممنونتون میشم

----------


## vbhamed

سلام
بايد از فرمول كشيدن بيضي و فرمول چرخش استفاده كنيد، كل متغيرها هم از نوع Single باشه

براي رسم دايره يا بيضي از فرمول زير استفاده كنيد
x = Sin(r) * 100
y = Cos(r) * 100
r بايد در يك حلقه از 0 تا 360 تغيير كنه تا با گذاشتن يك نقطه در هر x, y بدست آمده يك دايره رسم بشه، عدد 100 هم كم و زياد بشه تو شكل بيضي كه افقي و عمودي باشه تاثير ميزاره، هر دوش مثل هم باشه ميشه دايره


اينم فرمول چرخش
xr = x0 + (X - x0) * Cos(r) + (Y - y0) * Sin(r)
yr = y0 + (Y - y0) * Cos(r) - (X - x0) * Sin(r)
X, Y = مختصات نقاط تشكيل دهنده بيضي
xr, yr = مختصات جديد بعد از چرخش
x0, y0 = مبدا مختصات
r = ميزان چرخش به راديان (Radian = Degrees * 3.14 / 180)

اين دو تا فرمول رو با هم تركيب كنيد تا بتونيد يك بيضي زاويه دار بكشيد (هر نقطه اي از بيضي در حلقه بالايي بدست اومد تو فرمول چرخش بزاريد تا چرخش اون هم محاسبه بشه بعد رسم كنيد)

ضمنا بايد فرمتون طبق محور مختصات باشه كه مي‌تونيد دستورات زير رو در ابتداي Form_Load بزاريد
    Me.AutoRedraw = True
    Me.WindowState = vbMaximized
    Show
    DoEvents
    Me.ScaleLeft = -120
    Me.ScaleTop = 120
    Me.ScaleWidth = 240
    Me.ScaleHeight = -240
    Line (-120, 0)-(120, 0), vbRed
    Line (0, -120)-(0, 120), vbRed
    Me.DrawWidth = 2

----------


## mzeus98

دوست عزیز ، ممنون از اینکه به درخواستم توجه کردید و جواب داید !
اما من چون تازه کار هستم ، خیلی نتونستم از کد های شما چیزی سر در بیارم
اگر ممکنه لطف بکنید یکم ساده تر توضیح بدید و یک نمونه هم مثال بزنید

----------


## vbhamed

سلام

اول اينكه طبق قوانين، اين تالار فقط براي گرفتن راهنمايي است نه نوشتن برنامه پس نوشتن برنامه با خودتونه
براي كاري كه از شما خواسته شده نمي‌تونيد از دستورات آماده مثل Circle استفاده كنيد بايد كار دستور Circle رو خودتون بنويسيد چيزي شبيه رسم نمودار تابع

در ابتدا مي‌خواهيم يك دايره رسم كنيم و بعد بيضي و بعدش بيضي زاويه دار
براي رسم دايره بايد يك حلقه بزاريم كه از 0 تا 360 درجه حركت كنه و به ازاي هر بار اجراي حلقه مختصات نقاط تشكيل دهنده دايره رو بدست بياريم كه با فرمول گفته شده بدست مياد 

مثلا اگر متغير حلقه i باشه و مقدارش 30 باشه بايد در نقطه اي به مختصات زير يك نقطه بزاريم و براي بقيه زوايا هم به همين ترتيب اينطوري حاصل نهايي شكل دايره خواهد بود
(Sin(30*3.14/180) * 100, Cos(30*3.14/180) * 100)

حالا اگر اون عدد 100 ها رو تغيير بديم شكل بيضي ميشه
عدد 30 كه زاويه 30 درجه هست هم ضربدر 3.14 و تقسيم بر 180 شده چون توابع مثلثاتي Sin و Cos با واحد راديان كار مي‌كنند نه درجه

تا اينجا دايره يا بيضي معمولي رسم شده ولي اگر بخواهيم زاويه هم داشته باشه بايد مختصات بدست آمده رو در فرمول دوران هم قرار بديم تا چرخش هم محاسبه بشه مثلا در مثال بالا Sin(30*3.14/180) مختصات X نقطه هست كه بايد در فرمول چرخش كه در پست قبلي گفتم گذاشته بشه، ساير پارامترهاي فرمول چرخش هم كه توضيح داده شد، همين كار رو براي Y نقطه هم انجام ميديم و اين نقطه (xr, yr) جديد رو رسم مي‌كنيم (با دستور Pset)

اينطوري يك بيضي زاويه دار رسم ميشه (البته بايد اون عددهاي 100 رو هم متناسب تغيير بديم)

بهتره اول سعي كنيد فقط يك دايره رسم كنيد، بعد تبديل به بيضي كنيد و سپس چرخش

----------


## mzeus98

از لطف شما ممنونم 
فقط یک سوالی دارم ، این کد  ( داخل فرم لود )

Me.ScaleLeft = -120
Me.ScaleTop = 120
Me.ScaleWidth = 240
Me.ScaleHeight = -240

برای چیست ؟

----------


## vbhamed

سلام
مختصات فرم به طور پيش فرض به شكل زير است
گوشه سمت چپ بالاي فرم نقطه 0 , 0 و محور X ها به شكل معمول به سمت راست زياد ميشه ولي محور Y ها به پايين زياد ميشه و به بالا كم
اين كدي كه گذاشتيم اولا نقطه 0 , 0 رو منتقل مي‌كنه وسط صفحه، دوما محور Y ها رو درست مي‌كنه تا دقيقا طبق محورهاي رياضي باشه
محورهامون هم تنظيم كرديم هر كدوم تا 120 واحد مثبت و منفي رو نشون بدن (240 طول كل محور است)

----------

