PDA

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



mzeus98
چهارشنبه 12 آذر 1393, 16:21 عصر
سلام دوستان !
بعد از یک مدت دوباره فصل امتحانات شدش و ما هم حسابی در فصل گرافیک گیر کرده ایم !
طبق معمول معلممان چند عدد شکل داده است که در یکی از آنها گـیر کرده ام ...
شکل به این صورت است :
126262

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


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

vbhamed
پنج شنبه 13 آذر 1393, 01:05 صبح
سلام
بايد از فرمول كشيدن بيضي و فرمول چرخش استفاده كنيد، كل متغيرها هم از نوع 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
پنج شنبه 13 آذر 1393, 07:57 صبح
دوست عزیز ، ممنون از اینکه به درخواستم توجه کردید و جواب داید !
اما من چون تازه کار هستم ، خیلی نتونستم از کد های شما چیزی سر در بیارم
اگر ممکنه لطف بکنید یکم ساده تر توضیح بدید و یک نمونه هم مثال بزنید

vbhamed
جمعه 14 آذر 1393, 00:11 صبح
سلام

اول اينكه طبق قوانين، اين تالار فقط براي گرفتن راهنمايي است نه نوشتن برنامه پس نوشتن برنامه با خودتونه
براي كاري كه از شما خواسته شده نمي‌تونيد از دستورات آماده مثل 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
جمعه 14 آذر 1393, 01:26 صبح
از لطف شما ممنونم
فقط یک سوالی دارم ، این کد ( داخل فرم لود )

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

برای چیست ؟

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