早教吧 育儿知识 作业答案 考试题库 百科 知识分享

用MFC做了一个椭圆时钟程序,指针为什么会随着椭圆形状而边走改变?比如画秒针时用了语句:pDC->LineTo(CenterX+(int)((double)CenterX*4/5*sin(radius)),CenterY-(int)((double)CenterY*4/5*cos(radius)));我知道因为我

题目详情
用MFC做了一个椭圆时钟程序,指针为什么会随着椭圆形状而边走改变?
比如画秒针时用了语句:pDC->LineTo(CenterX+(int)((double)CenterX*4/5*sin(radius)),CenterY-(int)((double)CenterY*4/5*cos(radius))); 我知道因为我是以客户区大小尺寸作为比例画出指针,客户区变的话椭圆大小也会随之改变.但是理论上当我不改变客户区大小时,CenterX*4/5和CenterY*4/5可以说是定值,就如同我试验时把它们设为100,秒针就转动时长度不变为100,但事实上它们却是随着椭圆的形状在变化.
此外,椭圆钟的刻度和圆形钟的刻度那个角度变化是一样的么,我发现单位角度(如画钟点时)radius=(double)i*2*3.14/12.0 这样写在圆形时钟和椭圆时钟里都是能很好的分布显示的,但就是有点想不通.
我是先画的椭圆钟面再画钟点,如下:
radius = (double)i*2*pi/12.0;//计算钟点放置的位置
x = CenterX - (size.cx/2) + (int)((double)(CenterX - 20)*sin(radius));
y = CenterY - (size.cy/2) - (int)((double)(CenterY - 20)*cos(radius));
//绘制钟点
pDC->TextOut(x,y,str);
▼优质解答
答案和解析
因为CenterX和CenterY不相等.
如果指针需要定长,那么应该先计算一个固定长度,比如x、y取比较小的值然后乘以4/5,将这个值赋给secLength.然后x和y轴坐标都用这个secLength来计算秒针LineTo坐标就ok了.