在VC中,如何在MM_TEXT坐标下,进行一个点相对于另一个点(基点)的旋转,如果能给出代码,将万分感谢!!
解决方案 »
- 谁能给我一个能在mfc文件打开一张jpg格式的图片 最好用gdi+做的
- 如何将Picture控件中的位图另存为
- MFC扩展DLL中支持内存映射文件或共享内存吗??在线等!
- 以前写的一个连接远程数据库工具(可以上载文件和执行命令)(附主要代码)
- 类的实现,高手快进!!!!!!!!!!
- 一个“关于COleVariant类型转换“的类
- 请教资源问题
- 进程问题?
- MFC框架右上角(_口X)中X如何在关闭前进行某种控制操作?
- 正则表达式匹配中文逗号分隔开
- AS/400 数据库,想在VC中使用ADO访问,详细情况请进(100分,急!!!!!!!!!!!!!!!!!!!!!)
- 请问如何改变AfxMessageBox对话框的初始位置?
{
CPoint p1;
p1.x = 2* basePoint.x - p.x;
p1.y = 2* basePoint.y - p.y;
pDC->SetPixel(p1,RGB(0,0,0));
}
//p为原始点,p1为旋转点,basePoint为基点
饶原点旋转的公式:[p.x] [cos(a) sin(a)]
| | * | |
[p.y] [sin(-a) cos(a)],
p饶p1旋转类推。Easy!!!
{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角的位置
其实我的问题就是想旋转一个矩形,我想,旋转矩形的四个角的点坐标后,在用LineTo把它们连起来,就可以成为一个旋转后的矩形了。我用zhaogaojian(米柑年成)提供的算法,但是,旋转后的矩形失真很大啊,有没有更精确的算法啊
[y][-sin(a) cos(a)] = [y1]
[1][0 1] [ 1]
a旋转的角度
void rotate_point(theta,x,y,x_org,y_org)
double theta,*x,*y;
int x_org,y_org;
{
double tx,ty;
tx=*x-x_org;
ty=*y-y_org;
*x=tx*cos(theta)-ty*sin(theta);
*y=tx*sin(theta)+ty*cos(theta);
*x+=x_org;
*y+=y_org;
}
{
double tx,ty;
tx=*x-x_org;
ty=*y-y_org;
*x=tx*cos(theta)-ty*sin(theta);
*y=tx*sin(theta)+ty*cos(theta);
*x+=x_org;
*y+=y_org;
}
void CPpppDlg::OnButton1()
{
double x=10.0,y=10.0;
rotate_point(3.1415926,&x,&y,0.0,0.0);
CString str;
str.Format("%f,%f",x,y);
AfxMessageBox(str) ;
}
这样比较清晰一点