首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

如何用MFC画齿轮,小弟我是没有一点思路

2012-09-02 
怎么用MFC画齿轮,我是没有一点思路。如题,本来是这样的一张照片别人已经画了一半了,如下图,一个大圆,半径是

怎么用MFC画齿轮,我是没有一点思路。
如题,本来是这样的一张照片

别人已经画了一半了,如下图,一个大圆,半径是320

现在叫我用红色画笔画51个齿,如下图

我现在是一点思路一没有,那个齿是什么形状的?不叫我用直线画,
要用法数学的方法先计算出各点来,然后再用 setpoint 去描出来,不能用直线来绘制 
memdc.SetPoint(x,y) 
注意哈,一点一点地描,你手动将点计算出来,然后用上面的画上去
一共51个齿,你用红颜色画51个齿出来就行了
齿可以画30长即可
就给了我这点提示,我现在完全没有思路,谁给我点提示啊,我把画圆的代码贴出来,就在那里添加

C/C++ code
//--- 显示专用int CRunWHView::Draw(){        CPen pen(PS_SOLID,0,RGB(0xff,0,0)); //RED    CPen* oldpen;    oldpen = (CPen*) memdc.SelectObject(&pen );    CBrush br1;    br1.DeleteObject();  //create drawing fill brush    br1.CreateSolidBrush(RGB(0,0,255)); //Green    CBrush* oldbr;    oldbr=(CBrush*) memdc.SelectObject(&br1 );    CBrush brw;    brw.DeleteObject();  //create drawing fill brush    brw.CreateSolidBrush(RGB(255,255,255)); //Green    DrawWH51();        ::StretchDIBits(memdc.m_hDC,    0,0, RUN_WH_IMG_W,RUN_WH_IMG_W,    0,0, RUN_WH_IMG_W,RUN_WH_IMG_W,    DrawImageBuf, (PBITMAPINFO)&BmpInfo, DIB_RGB_COLORS, SRCCOPY);    int x,y,w,h,r,d,i,j,k;    //--- 绘制大圆    x=RUN_WH_IMG_W/2;    y=RUN_WH_IMG_W/2;    w=RUN_WH_IMG_W/2;    x=0+10;    y=0+10;    w=RUN_WH_IMG_W-10;    memdc.SelectObject(&pen );    memdc.SelectObject(&brw );    //memdc.SelectStockObject(NULL_BRUSH); //no fill rectangle    //memdc.Ellipse(x,y,w,w);    memdc.Ellipse(x,y,w,w);    //memdc.SelectObject(oldpen);    //--- 绘制小圆    CTRealPoint p1,p2,p3,p0;    x=RUN_WH_IMG_W/2;    y=RUN_WH_IMG_W/2;    memdc.SelectObject(&br1 );    //-- 中心小圆    r=40;    memdc.Ellipse(x-r,y-r,x+r,y+r);    //-- 外环小圆    r=35;            x=RUN_WH_IMG_W/2;    y=RUN_WH_IMG_W/2;    p0.Set(x,y);    p1.Set(x,y-200);    p0.Rotate2A(&p1,45/2);        x=p1.X;    y=p1.Y;    memdc.Ellipse(x-r,y-r,x+r,y+r);        for (i=0;i<7;i++)    {        p0.Rotate2A(&p1,45);                x=p1.X;        y=p1.Y;                        memdc.Ellipse(x-r,y-r,x+r,y+r);            }    memdc.SelectObject(oldpen );    memdc.SelectObject(oldbr  );        pdc->BitBlt(0,0,RUN_WH_IMG_W,RUN_WH_IMG_W,&memdc,0,0,SRCCOPY);    return(1);}


[解决办法]
// 齿的计算公式没有给你?
[解决办法]
// 是标准齿轮?我看那个原图,不是齿轮啊。
[解决办法]
解析几何不是有个阿基美德螺线,渐近线,还是摆线,用于齿轮?
[解决办法]
找张纸,自己手动计算一下每个齿廓线的公式
画100个齿和画1个齿没啥区别,
你把关于x轴对称的一个齿(分成左右2部分)能画出来,然后根据齿数计算出一个偏转角度
用循环,每画完一个,偏转角度递增一次,然后开始绘制下一个(齿廓点都要根据偏转角度变换,二维平面,很简单的)

[解决办法]
唉,和MFC有什么关系?完全是算法。别人其实做了很少一部分,留给你的是大部分工作。
[解决办法]
数学问题?
如果不是数学问题,就用BitBlt贴上去吧。
[解决办法]
最直接的办法把图贴上去不就得了
[解决办法]
计算points
draw多边形方法

热点排行