PDA

View Full Version : مبتدی: ترسیم شکل ( y=sin(x به هر نحوی!!



vahid jvani
سه شنبه 08 فروردین 1391, 21:27 عصر
سلام به همه دوستان برنامه نویس!
یه راهنمایی میخواستم
استاد سوال داده:
نمودار ( y=sin(x را در بازه ی 2π- تا 2π رسم کنید شما می توانید یک کارکتر مثل* را به نحوی روی خط
( y=sin(x چاپ کنید یا از فایل سرایند graphics.h که در اینترنت موجود است استفاده کنید.

از راه اول نتوستم مساله رو حل کنم! از راه دوم هم منظورشو نفهمیدم من با vs 2010 کار میکنم ولی نمیدونم این فایل رو از کجا باید دانلودش کنم و بعد کجا بذارمش!!

vistacali
سه شنبه 08 فروردین 1391, 23:09 عصر
ما که نفهمیدیم تو برنامه اماده میخوای یا هدر فایل رو، هدر رو برات اپ میکنم ، میتونی توی قسمت هدرفایل ها در ویژوال استدیو اضاف کنی و و بعد صداش بزنی و از اون استفاده کنی

84788

!!!___>>>فایل به صورت فشورده شده است بعد از دانلود از حالت فشورده خارج شود

shahmohammadi
چهارشنبه 09 فروردین 1391, 00:17 صبح
graphics.h رو نمي تونيد در ويژوال سي ++ بكار بريد. اين فايل براي محصولات بورلند هست. مثلا در تربو سي مي تونيد از اين كتابخونه استفاده كنيد. در ويژوال مي تونيد از توابع gdi استفاده كنيد. يه نمونش كه با dev c++ نوشتم اينجا (http://barnamenevis.org/showthread.php?150444-%D9%85%D8%AC%D9%85%D9%88%D8%B9%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%DB%8C-%D9%86%D9%88%D8%B4%D8%AA%D9%87-%D8%B4%D8%AF%D9%87-%D8%A8%D9%87-%D8%B2%D8%A8%D8%A7%D9%86-C-%D9%88-C&p=1397115&viewfull=1#post1397115) هست.

vahid javani
چهارشنبه 09 فروردین 1391, 18:21 عصر
graphics.h رو نمي تونيد در ويژوال سي ++ بكار بريد. اين فايل براي محصولات بورلند هست. مثلا در تربو سي مي تونيد از اين كتابخونه استفاده كنيد. در ويژوال مي تونيد از توابع gdi استفاده كنيد. يه نمونش كه با dev C++‎ نوشتم اينجا (http://barnamenevis.org/showthread.php?150444-%D9%85%D8%AC%D9%85%D9%88%D8%B9%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%DB%8C-%D9%86%D9%88%D8%B4%D8%AA%D9%87-%D8%B4%D8%AF%D9%87-%D8%A8%D9%87-%D8%B2%D8%A8%D8%A7%D9%86-C-%D9%88-C&p=1397115&viewfull=1#post1397115) هست.

ببخشید دوست عزیز من متوجه این کد که زحمت کشیدید نشدم! همون رسم ( y=sin(x هست؟ توی vs میتونم اجراش کنم؟(هرکاری کردم باز نشد)

Ananas
چهارشنبه 09 فروردین 1391, 21:17 عصر
سلام.
یه سری بزن به اینجاها :
http://msdn.microsoft.com/en-us/library/dd145031%28v=vs.85%29.aspx
http://msdn.microsoft.com/en-us/library/aa925824.aspx
http://msdn.microsoft.com/en-us/library/aa928058.aspx
برای ترسیم کردم از GDI رابط گرافیکی خود ویندوز استفاده کن. توابع رسم خط رو هم که آدرسشو نوشتم. از HDC و Bitmap و BitBlt و LineTo و اینجور چیزا استفاده کنی. اگه برنامت تو حالت پنجره ای باشه میتونی با استفاده از تابع GetDC خیلی زاحت HDC پنجره برنامه رو بگیری و ترسیم رو روش انجام بدی و تابع سینوس رو تو یک حلقه مثلا به 100 قسمت تقسیم میکنی و x , y هر نقطه روی نمودار رو بدست میاری و مثلا در عدد 100 ضرب میکنی (که بزرگ تر نمایش بده) بعد با تابع LineTo روی پنجره برنامه مرحله به مرحله 100 تا خط به هم چسبسده رسم میکنی تا نمودار کامل بشه.

Ananas
چهارشنبه 09 فروردین 1391, 21:27 عصر
اینم مثالش :
void DrawSin(HWND hwnd, float step, float size)
{
#define pi 3.14159f
HDC dc = GetDC(hwnd);
for (float i = -pi; i <= pi; i += pi / step) {
float j = sin(i);
LineTo(dc, (i + pi) * size, (-j + 1) * size);
}
ReleaseDC(hwnd, dc);
}

نمونه استفاده (به جای this->Handle باید هندل پنجره برنامتو بنویسی) :


DrawSin(this->Handle, 360, 100);

shahmohammadi
پنج شنبه 10 فروردین 1391, 01:52 صبح
روشي كه جناب Ananas گفتند هم روش خوبي هست. در روش من فقط نقطه ها رو رسم مي كنيم و كاري به كشيدن خط بين نقاط نداريم. در روش ايشون چند نقطه رو پيدا كرده و بينشون خط رسم مي كنيم.

من نحوه ي رسم نمودار رو به روش نقطه نقطه مي نويسم:
فرض كنيد تابعي به اسم gotoxy(x,y) داريد. كه مي آد در نقطه ي ايكس و ايگرگ يه نقطه رو رسم مي كنه.
دستورات زير نمودار تابع f(X) رو رسم مي كنه:
for(float x=LEFT;x<RIGHT;x+=FOOT)
gotoxy(ZOOM*x+A,-ZOOM*f(x)+B);
LEFT و RIGHT كمترين مقدار و بيشترين مقدار ايكس رو در نمودار نشون مي دهند. FOOT هر چقدر كوچكتر باشه نقطه ها بهم نرديكترند. A و B مختصات مركز مختصات در صفحه ي ما هستند.
در مثالي كه گفتم با دو سطر زير نمودار sin(10/j) رو رسم كردم:
for(float j=-6.28;j<6.28;j+=0.0001)
SetPixel(hdc, 40*j+265, -40*sin(10/j)+150, RGB(255-j*30,j*30,j*20));
در اين مثال مقدار x اي كه گفتم در پارامتر دوم setpixel قرار مي گيره و مقدار y در پارامتر سوم.
اميد وارم توضيحاتم كامل بوده باشه.
الان كه الگوريتمش رو ديدين مي تونيد توي هر جايي و هر تابعي رو رسم كنيد.

اون كد ها هم كه در پست قبل گفتم توي كامپايلر دو سي ++ بدون خطا اجرا مي شند. (نوع پروژه windows win32 باشه)