64,652
社区成员
发帖
与我相关
我的任务
分享
#define NDIV 50
#define PI 3.1415926
float xc[NDIV],yc[NDIV],xb,yb,xe,ye;
float AB=100,BC=330,CE=330,DE=100;
float xa=-120,ya=200,xd=120,yd=200;
int ipos=0;
void CalcAndDrawMech(float L,float ratio)
{
float phi2,phi3,phi4,phi5;
float x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x0,y0;
x0=0,y0=-150;
x1=x0;y1=y0+L;
x2=x0-L*cos(54*PI/180);y2=y0-L*sin(54*PI/180);
x3=x0+L*cos(18*PI/180);y3=y0+L*sin(18*PI/180);
x4=x0-L*cos(18*PI/180);y4=y0+L*sin(18*PI/180);
x5=x0+L*cos(54*PI/180);y5=y0-L*sin(54*PI/180);
glColor3f(1,0,0);
/*glBegin(GL_LINE_STRIP);
glVertex3f(x1*ratio,y1*ratio,0);
glVertex3f(x2*ratio,y2*ratio,0);
glVertex3f(x3*ratio,y3*ratio,0);
glVertex3f(x4*ratio,y4*ratio,0);
glVertex3f(x5*ratio,y5*ratio,0);
glVertex3f(x1*ratio,y1*ratio,0);
glEnd();*/
float k;
float a,b;
/*printf("x1=%f\n",x1);
printf("y1=%f\n",y1);
printf("x2=%f\n",x2);
printf("y2=%f\n",y2);
printf("x3=%f\n",x3);
printf("y3=%f\n",y3);
printf("x4=%f\n",x4);
printf("y4=%f\n",y4);*/
if(ipos<10) {a=ipos;b=10-ipos;k=a/b;xc[ipos]=(x1+k*x2)/ (k+1)*ratio;yc[ipos]=(y1+k*y2)/ (k+1)*ratio;}
else if(ipos<20) {a=ipos-10;b=10-(ipos-10);k=a/b;xc[ipos]=(x2+k*x3)/ (k+1)*ratio;yc[ipos]=(y2+k*y3)/ (k+1)*ratio;}
else if(ipos<30) {a=ipos-20;b=10-(ipos-20);k=a/b;xc[ipos]=(x3+k*x4)/ (k+1)*ratio;yc[ipos]=(y3+k*y4)/ (k+1)*ratio;}
else if(ipos<40) {a=ipos-30;b=10-(ipos-30);k=a/b;xc[ipos]=(x4+k*x5)/ (k+1)*ratio;yc[ipos]=(y4+k*y5)/ (k+1)*ratio;}
else if(ipos<50) {a=ipos-40;b=10-(ipos-40);k=a/b;xc[ipos]=(x5+k*x1)/ (k+1)*ratio;yc[ipos]=(y5+k*y1)/ (k+1)*ratio;}
else return;
//printf("ipos=%d\n",ipos);
printf("a=%f\n",a);
printf("b=%f\n",b);
printf("k=%f\n",k);
printf("xc=%f\n",xc[ipos]);
printf("yc=%f\n",yc[ipos]);
RRR(xc[ipos],yc[ipos],xa,ya,BC,AB,1,&phi2,&phi3);
RRR(xc[ipos],yc[ipos],xd,yd,CE,DE,-1,&phi4,&phi5);
xb=xc[ipos]+BC*cos(phi2);
yb=yc[ipos]+BC*sin(phi2);
xe=xc[ipos]+CE*cos(phi4);
ye=yc[ipos]+CE*sin(phi4);
printf("xb=%f\n",xb);
printf("yb=%f\n",yb);
printf("xe=%f\n",xe);
printf("ye=%f\n",ye);
glColor3f(1,0,0);
glBegin(GL_LINE_STRIP);
glVertex3f(xa*ratio,ya*ratio,0);
glVertex3f(xb*ratio,yb*ratio,0);
glVertex3f(xc[ipos]*ratio,yc[ipos]*ratio,0);
glVertex3f(xe*ratio,ye*ratio,0);
glVertex3f(xd*ratio,yd*ratio,0);
glEnd();
int i;
glPointSize(5.0f);
glBegin(GL_POINTS);
for(i=0;i<NDIV;i++)
glVertex3f(xc[i]*ratio,yc[i]*ratio,0);
glEnd();
}
int EYE=500;
void myDisplay(void)
{
glEnable(GL_DEPTH_TEST);
glShadeModel(GL_SMOOTH); //GL_FLAT
//设置缓冲颜色
glClearColor(0.7,0.7,0.7,1.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
InitLight();
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(75, 1, 1, 5000);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
//设置视点
gluLookAt(0, 0, EYE, 0, 0, 0, 0, 1, 0);
//添加坐标轴
//DrawAxis();
//RenderParts();
//printf("ipos=%d\n",ipos);
CalcAndDrawMech(60,1);
glFlush();
}
void OnTimer(int id)
{
if(ipos<NDIV-1) ipos++;
else ipos=0;
printf("ipos=%d\n",ipos);
glutPostRedisplay();
glutTimerFunc(100,OnTimer,1);
}
#pragma comment(lib,"user32")
#include <stdio.h>
#include <time.h>
#include <sys/timeb.h>
#include <windows.h>
CRITICAL_SECTION cs_log;
char datestr[16];
char timestr[16];
char mss[4];
void log(char *s) {
struct tm *now;
struct timeb tb;
EnterCriticalSection(&cs_log);
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);
LeaveCriticalSection(&cs_log);
}
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;
InitializeCriticalSection(&cs_log);
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);
}
}
DeleteCriticalSection(&cs_log);
return 0;
}
//2018-04-17 10:07:54.218 In main
//2018-04-17 10:07:54.718 In myTimerProc1
//2018-04-17 10:07:55.218 In main
//2018-04-17 10:07:55.718 In myTimerProc2
//2018-04-17 10:07:56.218 In main
//2018-04-17 10:07:56.218 In myTimerProc1
//2018-04-17 10:07:56.718 In main
//2018-04-17 10:07:56.718 In myTimerProc1
//2018-04-17 10:07:57.218 In main
//2018-04-17 10:07:57.718 In myTimerProc2
//2018-04-17 10:07:58.218 In main
//2018-04-17 10:07:58.218 In myTimerProc1
//2018-04-17 10:07:58.718 In main
//2018-04-17 10:07:58.718 In myTimerProc1
//2018-04-17 10:07:59.218 In main
//2018-04-17 10:07:59.718 In myTimerProc2
//2018-04-17 10:08:00.218 In main
//2018-04-17 10:08:00.218 In myTimerProc1
//2018-04-17 10:08:00.718 In main
//2018-04-17 10:08:00.718 In myTimerProc1
//2018-04-17 10:08:01.218 In main
//2018-04-17 10:08:01.718 In myTimerProc2
//2018-04-17 10:08:02.218 In main
//2018-04-17 10:08:02.218 In myTimerProc1
//2018-04-17 10:08:02.718 In main
//2018-04-17 10:08:02.718 In myTimerProc1
//2018-04-17 10:08:03.218 In main
//2018-04-17 10:08:03.718 In myTimerProc2
//2018-04-17 10:08:04.218 In main
//2018-04-17 10:08:04.218 In myTimerProc1
//2018-04-17 10:08:04.718 In main
//2018-04-17 10:08:04.718 In myTimerProc1
//2018-04-17 10:08:05.218 In main
//2018-04-17 10:08:05.718 In myTimerProc2
//2018-04-17 10:08:06.218 In main
//2018-04-17 10:08:06.218 In myTimerProc1
//2018-04-17 10:08:06.718 In main
//2018-04-17 10:08:06.718 In myTimerProc1
//2018-04-17 10:08:07.218 In main
//2018-04-17 10:08:07.718 In myTimerProc2