saalek110
Well-Known Member
من با بورلند سی 5 کار کردم.
برنامه زیر کامل نیست ولی چند نکته توش داره که شاید کمکت بکنه.
نکات:
نکته اول:
قبل تغییر مختصات اول شکل را پاک کنید. یعنی اول توپ را پاک کنید. بعد مختصات تغییر بدهید . بعد در محل جدید رسم کنید.
نکته دوم:
من حلقه ای داخل حلقه شما افزودم تا بتوانم رسم ها را دنبال کنم.
نکته سوم:
فکر کنم مختصات را نمیشه اعشاری داد. من cast کردم در خط :
یعنی مجموعه را تبدیل به int کردم. ولی مسیر حرکت شکسته شد. یعنی چیزی شبیه ذوزنقه شد تا سهمی. از توابع تبدیل استفاده کنید. و یا اینکه مجموعه را تبدیل نکنید بلکه جز جز تبدیل کنید. خلاصه اینکه ور برید تا شکل خوبی دربیاد.
نکته سوم:
من نوشتم:
یعنی v به x اضافه میشه. در فیزیک گویا داشتیم: ایکس = ایکس صفر + وی * زمان . هر طور برنامه جواب می دهد کد بنویسید.
نکته چهارم:
شما دایره را همچنان با یک رنگ می کشیدید ولی رنگ داخلش را پاک می کردید. با setcolor رنگ قلم رسم دایره را تغییر دهید. تا بتوانید دایره کهنه را پاک کنید.
نکته پنجم:
بعضی متغیرها که شما int گرفته بودید را من double کردم تا بتوانم به شکل ریز تری کم و زیاد کنم. مثلا time را من هر بار 0.001 اضافه کردم. چون سرعت چرخش حلقه زیاد است و من با کد آنقدر سرعت را پایین آوردم تا حرکت توپ را بتوانم ببینم. مثل همان حلقه هرز گرد داخلی که یک دایره خنثی در نقطه صفر و صفر می کشد.
نکته ششم:
جاذبه مخالف سرعت رو به بالا است. پس علامت ها مخالف باید باشد. یعنی یکی مثبت و یکی منفی.
امیدوارم این راهنمایی ها کمک کند. موفق باشید.
برنامه زیر کامل نیست ولی چند نکته توش داره که شاید کمکت بکنه.
کد:
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
int main(void)
{
/* request autodetection */
int gdriver = DETECT, gmode, errorcode;
int stangle = 45, endangle = 135;
int radius = 100;
double v=1.5;//int v=100;
int x,y,r2=5;
double time;
int g=30;
/* initialize graphics and local variables */
initgraph(&gdriver, &gmode, "");
/* read result of initialization */
errorcode = graphresult();
if (errorcode != grOk) { /* an error occurred */
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1); /* terminate with an error code */
}
setcolor(getmaxcolor());
x=0;
y=getmaxy();
time=0;
while(x<=getmaxx())
{
for (double counter=1 ;counter<1000 ; counter++) circle(0,0,0);
setcolor(0);
circle(x,y,r2);
//floodfill(x,y,0);
time=time+0.001;
x=x+v;
y=int(y-v+g*time*time);
//x=v*cos(45*degree)*time;
//y=((v*sin(45*degree))+(g*time))*time;
setcolor(9);
circle(x,y,r2);
//floodfill(x,y,9);
}
getch();
closegraph();
return 0;
}
نکات:
نکته اول:
قبل تغییر مختصات اول شکل را پاک کنید. یعنی اول توپ را پاک کنید. بعد مختصات تغییر بدهید . بعد در محل جدید رسم کنید.
نکته دوم:
من حلقه ای داخل حلقه شما افزودم تا بتوانم رسم ها را دنبال کنم.
نکته سوم:
فکر کنم مختصات را نمیشه اعشاری داد. من cast کردم در خط :
کد:
y=int(y-v+g*time*time);
نکته سوم:
من نوشتم:
کد:
x=x+v;
نکته چهارم:
شما دایره را همچنان با یک رنگ می کشیدید ولی رنگ داخلش را پاک می کردید. با setcolor رنگ قلم رسم دایره را تغییر دهید. تا بتوانید دایره کهنه را پاک کنید.
نکته پنجم:
بعضی متغیرها که شما int گرفته بودید را من double کردم تا بتوانم به شکل ریز تری کم و زیاد کنم. مثلا time را من هر بار 0.001 اضافه کردم. چون سرعت چرخش حلقه زیاد است و من با کد آنقدر سرعت را پایین آوردم تا حرکت توپ را بتوانم ببینم. مثل همان حلقه هرز گرد داخلی که یک دایره خنثی در نقطه صفر و صفر می کشد.
نکته ششم:
جاذبه مخالف سرعت رو به بالا است. پس علامت ها مخالف باید باشد. یعنی یکی مثبت و یکی منفی.
امیدوارم این راهنمایی ها کمک کند. موفق باشید.