提问:图形旋转问题
在窗口客户区的左上角向右下角缓慢下落一个小三角形,小三角做逆时针缓慢旋转,
到达右下角时,正好以一条底边和客户区边框重合并停止。
在改变窗口大小时,停止三角形的下落,重新从左上角开始下落。
最好能给出代码。努力学习VC中:)
先谢谢各位啦。
问题点数:100、回复次数:7Top
1 楼nonocast(如果没有如果)回复于 2004-08-03 19:23:48 得分 40
x' = x[r] +( x - x[r] )cos angle - ( y - y[r] )sin angle
y' = y[r] +( x - x[r] )sin angle + ( y - y[r] )cos angle
x[r], y[r]为定点,就是绕这点旋转
x, y为原始点
x', y'为选转后的点
Top
2 楼qwerttyy(今天也要快乐!)(每天回十帖)回复于 2004-08-04 18:07:33 得分 0
可是如何能确定到达右下角时,正好以一条底边和客户区边框重合并停止?
是不是应该算算窗口的大小?Top
3 楼syy64(太平洋)回复于 2004-08-04 18:53:17 得分 0
仿射变换,坐标变换。Top
4 楼qwerttyy(今天也要快乐!)(每天回十帖)回复于 2004-08-06 19:56:53 得分 0
???不太明白。楼上的大哥能详细点吗?Top
5 楼qwerttyy(今天也要快乐!)(每天回十帖)回复于 2004-08-08 13:39:16 得分 0
有人回答吗?Top
6 楼zhaogaojian(米柑年成-WWW.VSFAN.NET)回复于 2004-08-09 09:44:33 得分 60
CPoint CBase::Circu(CPoint bp, CPoint mp, double alpha)
{float k;
double q, r;
CPoint rp;
int x,y;
CString str;
alpha=(alpha/180)*3.141592654;
if(bp.x==mp.x){if(bp.y>mp.y)q=-1.57;else q=1.57;}
else
{
int delty=mp.y-bp.y;
int deltx=mp.x-bp.x;
k=((float)delty)/deltx;
q=atan(k);
if(q<0)
{
q+=3.141592654;
if(deltx>0)
q+=3.141592654;
}
else
if(deltx<0)
{
q+=3.141592654;
}
}
r=sqrt((mp.x-bp.x)*(mp.x-bp.x)+(mp.y-bp.y)*(mp.y-bp.y));
x=long(r*cos(alpha+q)+bp.x);
y=long(r*sin(alpha+q)+bp.y);
rp.x=x;
rp.y=y;
return rp;
}mp点绕bp点旋转alpha角后的坐标Top
7 楼qwerttyy(今天也要快乐!)(每天回十帖)回复于 2004-08-13 18:30:34 得分 0
谢谢两位大侠~Top




