MFC中如何画一个五角星,根据用户画的一条线 确定整个五角星,这条线也是五角星的一条边,好心人帮帮忙
来源:学生作业帮 编辑:作业帮 分类:数学作业 时间:2024/11/06 09:55:10
MFC中如何画一个五角星,根据用户画的一条线 确定整个五角星,这条线也是五角星的一条边,好心人帮帮忙
我算出五角星所在圆的圆心和半径,但是怎么实现啊 要算出每个角的坐标吗?但是有好多种情况,用户画的第一笔后很多方向啊.呜呜呜呜.还有我知道是把圆平均分五份,但是在代码中要怎样写啊. 我没有分...能不能帮忙啊
我算出五角星所在圆的圆心和半径,但是怎么实现啊 要算出每个角的坐标吗?但是有好多种情况,用户画的第一笔后很多方向啊.呜呜呜呜.还有我知道是把圆平均分五份,但是在代码中要怎样写啊. 我没有分...能不能帮忙啊
半径我就不去算了,我也不是很清楚,我有个不知道能不能帮上!
你画直线以后已经确定了2点 再参考我一下的,修改下,应该可以弄出来--
void CDrawView::OnRButtonDown(UINT nFlags,CPoint point)
{
\x05// TODO:Add your message handler code here and/or call default
\x05ptCenter=point;
\x05
\x05CView::OnRButtonDown(nFlags,point);
}
void CDrawView::OnLButtonUp(UINT nFlags,CPoint point)
{
\x05// TODO:Add your message handler code here and/or call default
\x05int r=50;
\x05double PI=3.1415926;
\x05//五条线,六个点,起点和终点重合
ptCenter=point;
//左上点
apoint[0].x=ptCenter.x-(long)(r*sin(2*PI/5));
apoint[0].y=ptCenter.y-(long)(r*cos(2*PI/5));
//右上点
apoint[1].x=ptCenter.x+(long)(r*sin(2*PI/5));
apoint[1].y=ptCenter.y-(long)(r*cos(2*PI/5));
//左下点
apoint[2].x=ptCenter.x-(long)(r*sin(PI/5));
apoint[2].y=ptCenter.y+(long)(r*cos(PI/5));
//正上点
apoint[3].x=ptCenter.x;
apoint[3].y=ptCenter.y-(long)r;
//右下点
apoint[4].x=ptCenter.x+(long)(r*sin(PI/5));
apoint[4].y=ptCenter.y+(long)(r*cos(PI/5));
//回到起点
apoint[5]=apoint[0];
//然后呢就直接画就行了
//用LineTo函数画
HDC hdc;
hdc=::GetDC(m_hWnd);
MoveToEx(hdc,apoint[0].x,apoint[0].y,NULL);
LineTo(hdc,apoint[1].x,apoint[1].y);
LineTo(hdc,apoint[2].x,apoint[2].y);
LineTo(hdc,apoint[3].x,apoint[3].y);
LineTo(hdc,apoint[4].x,apoint[4].y);
LineTo(hdc,apoint[5].x,apoint[5].y);
\x05CView::OnLButtonUp(nFlags,point);
}
再问: 你有没有 可以精确得算圆心的方法啊,我算的在某个方向才正确 要讨论好多东西
再答: 你想下-一条直线(不是直径)确定不了一个圆,麻烦呢--所以你要把所画的直线当做直径(也当做方向),(最后重绘檫掉这条线),在鼠标抬起时相应获取他的圆心。圆心就是(起点+终点坐标)/2. 只有思路,这个我没有试过,仅供参考--
再问: 谢谢了 那是五角星所在的圆 是可以确定的,只有两种情况 其中一种就可以了。。。唉。。。压力很大
再答: 一条边跟这个直线(可以不画)平行?就是能确定方向了。再去计算每一个坐标--貌似要用到直线跟水平线的角度问题把握下,仅供参考--呵呵--
你画直线以后已经确定了2点 再参考我一下的,修改下,应该可以弄出来--
void CDrawView::OnRButtonDown(UINT nFlags,CPoint point)
{
\x05// TODO:Add your message handler code here and/or call default
\x05ptCenter=point;
\x05
\x05CView::OnRButtonDown(nFlags,point);
}
void CDrawView::OnLButtonUp(UINT nFlags,CPoint point)
{
\x05// TODO:Add your message handler code here and/or call default
\x05int r=50;
\x05double PI=3.1415926;
\x05//五条线,六个点,起点和终点重合
ptCenter=point;
//左上点
apoint[0].x=ptCenter.x-(long)(r*sin(2*PI/5));
apoint[0].y=ptCenter.y-(long)(r*cos(2*PI/5));
//右上点
apoint[1].x=ptCenter.x+(long)(r*sin(2*PI/5));
apoint[1].y=ptCenter.y-(long)(r*cos(2*PI/5));
//左下点
apoint[2].x=ptCenter.x-(long)(r*sin(PI/5));
apoint[2].y=ptCenter.y+(long)(r*cos(PI/5));
//正上点
apoint[3].x=ptCenter.x;
apoint[3].y=ptCenter.y-(long)r;
//右下点
apoint[4].x=ptCenter.x+(long)(r*sin(PI/5));
apoint[4].y=ptCenter.y+(long)(r*cos(PI/5));
//回到起点
apoint[5]=apoint[0];
//然后呢就直接画就行了
//用LineTo函数画
HDC hdc;
hdc=::GetDC(m_hWnd);
MoveToEx(hdc,apoint[0].x,apoint[0].y,NULL);
LineTo(hdc,apoint[1].x,apoint[1].y);
LineTo(hdc,apoint[2].x,apoint[2].y);
LineTo(hdc,apoint[3].x,apoint[3].y);
LineTo(hdc,apoint[4].x,apoint[4].y);
LineTo(hdc,apoint[5].x,apoint[5].y);
\x05CView::OnLButtonUp(nFlags,point);
}
再问: 你有没有 可以精确得算圆心的方法啊,我算的在某个方向才正确 要讨论好多东西
再答: 你想下-一条直线(不是直径)确定不了一个圆,麻烦呢--所以你要把所画的直线当做直径(也当做方向),(最后重绘檫掉这条线),在鼠标抬起时相应获取他的圆心。圆心就是(起点+终点坐标)/2. 只有思路,这个我没有试过,仅供参考--
再问: 谢谢了 那是五角星所在的圆 是可以确定的,只有两种情况 其中一种就可以了。。。唉。。。压力很大
再答: 一条边跟这个直线(可以不画)平行?就是能确定方向了。再去计算每一个坐标--貌似要用到直线跟水平线的角度问题把握下,仅供参考--呵呵--