C语言模拟质点运动轨迹坐标,C语言定时器的使用 计算质点运动的移位
C語言定時器的使用 計算質點運動的位移
用C語言編一個質點運動的程序,知道起始點坐標(x1,y1)和終止點坐標(x2,y2),速度v和加速度a也知道,現在就想通過計算每隔一個時間t(假設10毫秒)質點的位移而得知質點所在的坐標(x,y)。
應該是要用定時器吧,但是我不會用,網上一查定時器都是單片機的定時器,但我不用單片器,只是單純的計算。。有沒有大神可以幫我編寫這一段程序,萬分感謝
------解決思路----------------------
你可以使用?alarm()??ualarm()??的信號機制。?在SIGALRM?信號捕捉函數中處理你的邏輯
------解決思路----------------------
為什么不用
BOOL?LineDDA(
int?nXStart,?????????????//?x-coordinate?of?line's?starting?point
int?nYStart,?????????????//?y-coordinate?of?line's?starting?point
int?nXEnd,???????????????//?x-coordinate?of?line's?ending?point
int?nYEnd,???????????????//?y-coordinate?of?line's?ending?point
LINEDDAPROC?lpLineFunc,??//?pointer?to?callback?function
LPARAM?lpData????????????//?pointer?to?application-defined?data
);
呢?
------解決思路----------------------
參考下面:#pragma?comment(lib,"user32")
#include?
#include?
#include?
#include?
char?datestr[16];
char?timestr[16];
char?mss[4];
void?log(char?*s)?{
struct?tm?*now;
struct?timeb?tb;
ftime(&tb);
now=localtime(&tb.time);
sprintf(datestr,"%04d-%02d-%02d",now->tm_year+1900,now->tm_mon+1,now->tm_mday);
sprintf(timestr,"%02d:%02d:%02d",now->tm_hour?????,now->tm_min??,now->tm_sec?);
sprintf(mss,"%03d",tb.millitm);
printf("%s?%s.%s?%s",datestr,timestr,mss,s);
}
VOID?CALLBACK?myTimerProc1(
HWND?hwnd,?//?handle?of?window?for?timer?messages
UINT?uMsg,?//?WM_TIMER?message
UINT?idEvent,?//?timer?identifier
DWORD?dwTime?//?current?system?time
)?{
log("In?myTimerProc1\n");
}
VOID?CALLBACK?myTimerProc2(
HWND?hwnd,?//?handle?of?window?for?timer?messages
UINT?uMsg,?//?WM_TIMER?message
UINT?idEvent,?//?timer?identifier
DWORD?dwTime?//?current?system?time
)?{
log("In?myTimerProc2\n");
}
int?main()?{
int?i;
MSG?msg;
SetTimer(NULL,0,1000,myTimerProc1);
SetTimer(NULL,0,2000,myTimerProc2);
for?(i=0;i<20;i++)?{
Sleep(500);
log("In?main\n");
if?(GetMessage(&msg,NULL,0,0))?{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return?0;
}
//2012-07-26?17:29:06.375?In?main
//2012-07-26?17:29:06.875?In?myTimerProc1
//2012-07-26?17:29:07.375?In?main
//2012-07-26?17:29:07.875?In?myTimerProc2
//2012-07-26?17:29:08.375?In?main
//2012-07-26?17:29:08.375?In?myTimerProc1
//2012-07-26?17:29:08.875?In?main
//2012-07-26?17:29:08.875?In?myTimerProc1
//2012-07-26?17:29:09.375?In?main
//2012-07-26?17:29:09.890?In?myTimerProc2
//2012-07-26?17:29:10.390?In?main
//2012-07-26?17:29:10.390?In?myTimerProc1
//2012-07-26?17:29:10.890?In?main
//2012-07-26?17:29:10.890?In?myTimerProc1
//2012-07-26?17:29:11.390?In?main
//2012-07-26?17:29:11.890?In?myTimerProc2
//2012-07-26?17:29:12.390?In?main
//2012-07-26?17:29:12.390?In?myTimerProc1
//2012-07-26?17:29:12.890?In?main
//2012-07-26?17:29:12.890?In?myTimerProc1
//2012-07-26?17:29:13.390?In?main
//2012-07-26?17:29:13.890?In?myTimerProc2
//2012-07-26?17:29:14.390?In?main
//2012-07-26?17:29:14.390?In?myTimerProc1
//2012-07-26?17:29:14.890?In?main
//2012-07-26?17:29:14.890?In?myTimerProc1
//2012-07-26?17:29:15.390?In?main
//2012-07-26?17:29:15.890?In?myTimerProc2
//2012-07-26?17:29:16.390?In?main
//2012-07-26?17:29:16.390?In?myTimerProc1
//2012-07-26?17:29:16.890?In?main
//2012-07-26?17:29:16.890?In?myTimerProc1
//2012-07-26?17:29:17.390?In?main
//2012-07-26?17:29:17.890?In?myTimerProc2
//2012-07-26?17:29:18.390?In?main
//2012-07-26?17:29:18.390?In?myTimerProc1
//2012-07-26?17:29:18.890?In?main
//2012-07-26?17:29:18.890?In?myTimerProc1
//2012-07-26?17:29:19.390?In?main
//2012-07-26?17:29:19.890?In?myTimerProc2
和下面:#include?
#include?
#include?
#ifdef?WIN32
#include?
#include?
#include?
#define??MYVOID?????????????void
#else
#include?
#include?
#include?
#define??CRITICAL_SECTION???pthread_mutex_t
#define??_vsnprintf?????????vsnprintf
#define??MYVOID?????????????void?*
#endif
//Log{
#define?MAXLOGSIZE?20000000
#define?ARRSIZE(x)?(sizeof(x)/sizeof(x[0]))
#include?
#include?
#include?
char?logfilename1[]="MyLog1.log";
char?logfilename2[]="MyLog2.log";
char?logstr[16000];
char?datestr[16];
char?timestr[16];
char?mss[4];
CRITICAL_SECTION?cs_log;
FILE?*flog;
#ifdef?WIN32
void?Lock(CRITICAL_SECTION?*l)?{
EnterCriticalSection(l);
}
void?Unlock(CRITICAL_SECTION?*l)?{
LeaveCriticalSection(l);
}
void?sleep_ms(int?ms)?{
Sleep(ms);
}
#else
void?Lock(CRITICAL_SECTION?*l)?{
pthread_mutex_lock(l);
}
void?Unlock(CRITICAL_SECTION?*l)?{
pthread_mutex_unlock(l);
}
void?sleep_ms(int?ms)?{
usleep(ms*1000);
}
#endif
void?LogV(const?char?*pszFmt,va_list?argp)?{
struct?tm?*now;
struct?timeb?tb;
if?(NULL==pszFmt
------解決思路----------------------
0==pszFmt[0])?return;
if?(-1==_vsnprintf(logstr,ARRSIZE(logstr),pszFmt,argp))?logstr[ARRSIZE(logstr)-1]=0;
ftime(&tb);
now=localtime(&tb.time);
sprintf(datestr,"%04d-%02d-%02d",now->tm_year+1900,now->tm_mon+1,now->tm_mday);
sprintf(timestr,"%02d:%02d:%02d",now->tm_hour?????,now->tm_min??,now->tm_sec?);
sprintf(mss,"%03d",tb.millitm);
printf("%s?%s.%s?%s",datestr,timestr,mss,logstr);
flog=fopen(logfilename1,"a");
if?(NULL!=flog)?{
fprintf(flog,"%s?%s.%s?%s",datestr,timestr,mss,logstr);
if?(ftell(flog)>MAXLOGSIZE)?{
fclose(flog);
if?(rename(logfilename1,logfilename2))?{
remove(logfilename2);
rename(logfilename1,logfilename2);
}
flog=fopen(logfilename1,"a");
if?(NULL==flog)?return;
}
fclose(flog);
}
}
void?Log(const?char?*pszFmt,...)?{
va_list?argp;
Lock(&cs_log);
va_start(argp,pszFmt);
LogV(pszFmt,argp);
va_end(argp);
Unlock(&cs_log);
}
//Log}
int?No_Loop=0;
MYVOID?testThread(void?*pcn)?{
int?n,i;
n=(int)pcn;
i=0;
while?(1)?{
sleep_ms(1000);
Log("in?testThread?%d:i==%ds\n",n,++i);
if?(i>=5)?No_Loop=1;
}
}
int?main(int?argc,char?*?argv[])?{
int?i;
#ifdef?WIN32
InitializeCriticalSection(&cs_log);
#else
pthread_mutex_init(&cs_log,NULL);
pthread_t?threads[1];
int?threadsN;
int?rc;
#endif
Log("=========BEGIN==================\n");
#ifdef?WIN32
_beginthread((void(__cdecl?*)(void?*))testThread,0,(void?*)1);
#else
threadsN=0;
rc=pthread_create(&(threads[threadsN++]),NULL,testThread,(void?*)1);if?(rc)?Log("%d=pthread_create?%d?error!\n",rc,threadsN-1);
#endif
i=0;
while?(1)?{
sleep_ms(100);
Log("in?main:i==%d\n",++i);
if?(No_Loop==1)?break;//
}
Log("=========END====================\n");
#ifdef?WIN32
DeleteCriticalSection(&cs_log);
#else
pthread_mutex_destroy(&cs_log);
#endif
return?0;
}
//2012-06-14?16:27:21.500?=========BEGIN==================
//2012-06-14?16:27:21.609?in?main:i==1
//2012-06-14?16:27:21.718?in?main:i==2
//2012-06-14?16:27:21.828?in?main:i==3
//2012-06-14?16:27:21.937?in?main:i==4
//2012-06-14?16:27:22.046?in?main:i==5
//2012-06-14?16:27:22.156?in?main:i==6
//2012-06-14?16:27:22.265?in?main:i==7
//2012-06-14?16:27:22.375?in?main:i==8
//2012-06-14?16:27:22.484?in?main:i==9
//2012-06-14?16:27:22.500?in?testThread?1:i==1s
//2012-06-14?16:27:22.593?in?main:i==10
//2012-06-14?16:27:22.703?in?main:i==11
//2012-06-14?16:27:22.812?in?main:i==12
//2012-06-14?16:27:22.921?in?main:i==13
//2012-06-14?16:27:23.031?in?main:i==14
//2012-06-14?16:27:23.140?in?main:i==15
//2012-06-14?16:27:23.250?in?main:i==16
//2012-06-14?16:27:23.359?in?main:i==17
//2012-06-14?16:27:23.468?in?main:i==18
//2012-06-14?16:27:23.500?in?testThread?1:i==2s
//2012-06-14?16:27:23.578?in?main:i==19
//2012-06-14?16:27:23.687?in?main:i==20
//2012-06-14?16:27:23.796?in?main:i==21
//2012-06-14?16:27:23.906?in?main:i==22
//2012-06-14?16:27:24.015?in?main:i==23
//2012-06-14?16:27:24.125?in?main:i==24
//2012-06-14?16:27:24.234?in?main:i==25
//2012-06-14?16:27:24.343?in?main:i==26
//2012-06-14?16:27:24.453?in?main:i==27
//2012-06-14?16:27:24.500?in?testThread?1:i==3s
//2012-06-14?16:27:24.562?in?main:i==28
//2012-06-14?16:27:24.671?in?main:i==29
//2012-06-14?16:27:24.781?in?main:i==30
//2012-06-14?16:27:24.890?in?main:i==31
//2012-06-14?16:27:25.000?in?main:i==32
//2012-06-14?16:27:25.109?in?main:i==33
//2012-06-14?16:27:25.218?in?main:i==34
//2012-06-14?16:27:25.328?in?main:i==35
//2012-06-14?16:27:25.437?in?main:i==36
//2012-06-14?16:27:25.500?in?testThread?1:i==4s
//2012-06-14?16:27:25.546?in?main:i==37
//2012-06-14?16:27:25.656?in?main:i==38
//2012-06-14?16:27:25.765?in?main:i==39
//2012-06-14?16:27:25.875?in?main:i==40
//2012-06-14?16:27:25.984?in?main:i==41
//2012-06-14?16:27:26.093?in?main:i==42
//2012-06-14?16:27:26.203?in?main:i==43
//2012-06-14?16:27:26.312?in?main:i==44
//2012-06-14?16:27:26.421?in?main:i==45
//2012-06-14?16:27:26.500?in?testThread?1:i==5s
//2012-06-14?16:27:26.531?in?main:i==46
//2012-06-14?16:27:26.531?=========END====================
總結
以上是生活随笔為你收集整理的C语言模拟质点运动轨迹坐标,C语言定时器的使用 计算质点运动的移位的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux获取指定字符,shell 获取
- 下一篇: c语言填空题删除字符串k右边,计算机二级