立方体平行投影变换演示系统 的斜平行投影 怎么画啊 计算机图形学的论文谁有用vc++6.0画好了的 麻烦发给程序给我 急救啊谁给了发补给20分

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/09 08:58:49

立方体平行投影变换演示系统 的斜平行投影 怎么画啊 计算机图形学的论文谁有用vc++6.0画好了的 麻烦发给程序给我 急救啊谁给了发补给20分
立方体平行投影变换演示系统 的斜平行投影 怎么画啊 计算机图形学的论文
谁有用vc++6.0画好了的 麻烦发给程序给我 急救啊
谁给了发补给20分

立方体平行投影变换演示系统 的斜平行投影 怎么画啊 计算机图形学的论文谁有用vc++6.0画好了的 麻烦发给程序给我 急救啊谁给了发补给20分
没分?

如果不想自己计算坐标的话可以开三个线程,然后每个线程调用LineDDA, 在LineDDA调用MoveTo, LineTo来划线。
比如:
struct DRAW_PARAM
{
int startX;
int startY;
int endX;
int endY;
};
DRAW_PARAM ...

全部展开

如果不想自己计算坐标的话可以开三个线程,然后每个线程调用LineDDA, 在LineDDA调用MoveTo, LineTo来划线。
比如:
struct DRAW_PARAM
{
int startX;
int startY;
int endX;
int endY;
};
DRAW_PARAM sDrawParam[3] = {
{100, 100, 100, 300}, // 从(100,100)画到(100,300)
{200, 100, 200, 300}, // 从(200,100)画到(200,300)
{300, 100, 300, 300}}; // 从(300,100)画到(300,300)
void CALLBACK LineDDACb( int x, int y, LPARAM lpParam )
{
CDC* pDC = (AfxGetApp()->GetMainWnd())->GetDC();
if (pDC == NULL)
return;
DWORD i = (DWORD)lpParam;
pDC->MoveTo(sDrawParam[i].startX, sDrawParam[i].startY);
pDC->LineTo(x, y);
sDrawParam[i].startX = x;
sDrawParam[i].startY = y;
Sleep(5);
}
DWORD WINAPI LineDDAThrad(PVOID pvParam)
{
DWORD i = (DWORD)pvParam;
::LineDDA(sDrawParam[i].startX, sDrawParam[i].startY,
sDrawParam[i].endX, sDrawParam[i].endY, (LINEDDAPROC)LineDDACb, (LPARAM)pvParam);
return 0;
}
调用的地方:
HANDLE handle[3];
for (DWORD i = 0; i < 3; i++)
{
handle[i] = CreateThread(NULL, 0, LineDDAThrad, (PVOID)i, CREATE_SUSPENDED, NULL);
ResumeThread(handle[i]);
}
如果需要同步:
for (int i = 0; i < 3; i++)
{
WaitForSingleObject( handle[i], INFINITE );
}
用timer的做法,如果你需要画很多条线的话:
struct DRAW_PARAM
{
int startX;
int startY;
int endX;
int endY;
int curX;
int curY;
};
DRAW_PARAM sDrawParam[3] =
{
{100, 100, 200, 300, 100, 100},
{200, 100, 300, 300, 200, 100},
{300, 100, 400, 300, 300, 100}
};
#define DRAW_STEPS 100
int nCounter = 0;
LRESULT CMyView::OnDrawTimer(WPARAM wp, LPARAM lp)
{
if ( nCounter > DRAW_STEPS )
return 0;
nCounter++;
CDC* pDC = GetDC();
for (int i = 0; i < 3; i++)
{
int newX = sDrawParam[i].startX + (sDrawParam[i].endX - sDrawParam[i].startX) * nCounter / DRAW_STEPS;
int newY = sDrawParam[i].startY + (sDrawParam[i].endY - sDrawParam[i].startY) * nCounter / DRAW_STEPS;
pDC->MoveTo(sDrawParam[i].curX, sDrawParam[i].curY);
pDC->LineTo(newX, newY);
sDrawParam[i].curX = newX;
sDrawParam[i].curY = newY;
}
return 0;
}
调用位置:
UINT_PTR m_idTimer = SetTimer(1, 50, NULL);
message map:
ON_MESSAGE(WM_TIMER, &CMyView::OnDrawTimer)
结束:
KillTimer(m_idTimer);
修改一下就可以动态生成坐标和画很多条线了。

收起