搜索
首页 电脑/网络 程序设计 C#/.NET

如何计算旋转点坐标?

我在做一个绘图程序,现在需要实现图形的旋转。我需要旋转后保存,所以不能用绘图时的坐标变换。我需要这样一个函数,给定一个起始点(x0,y0),以及一个旋转基准点(xo,yo),再给定一个角度degree,返回起始点绕基准点旋转给定角度后的新点(x,y)。坐标系统是GDI的系统,也就是说左上角是(0,0),右下为正方向,而不是笛卡尔坐标的右上为正方向。我在坐标换算上有点晕,谁能帮我一下?谢谢!

全部回答

2008-10-27

0 0
    纯讨论算法? 如果是看下这个 我借鉴opengl底层的旋转算法来类比下 因为在opengl里 是3维的 你只要把z当成0就好了 用矩阵相乘 你首先要定义出矩阵相乘的函数 下面我直接说结论了 假如你有个点( x0,y0,0) 你要想让这个点绕x轴旋转a度 那么就用 1 ,0 ,0 0 ,cosa ,-sina 0 ,sina ,cosa 这个3*3矩阵左乘 x0 y0 0 这个3*1的矩阵 乘出来一个3*1的矩阵就是对应的坐标 绕z旋转式左乘 cosa ,-sina,0 sina ,cosa,0 0 ,0 ,1 这个矩阵 绕y乘 cosa ,0 ,sina 0 ,1 , 0 -sina ,0 ,cosa 你需要先把你给丁旋转点和原点的坐标移动到和坐标轴重合 当然也要相应移动要旋转的点的坐标 然后按上述矩阵相乘出结果 再移动回去 恩 这样应该可以 。
    。

2008-10-28

528 0
    你需要的函数是什么语言的函数?下面给你 C 和 VB 的函数 rotation() 供参考。 C 函数和例子: #include #include void rotation(float xo,float yo, float x0,float y0,float angle,float *x1, float *y1) { angle=angle/180*3。
    1416; *x1=xo+x0*cos(angle)-y0*sin(angle); *y1=yo+y0*cos(angle)+x0*sin(angle); return; } void main() { float xo,yo,x0,y0,angle,x1,y1; xo=1; yo=1; x0=2; y0=2; angle=45; rotation(xo,yo,x0,y0,angle,&x1,&y1); printf("%f, %f",x1,y1); return; } VB 函数和例子: Private Sub rotation(xo As Single, yo As Single, x0 As Single, y0 As Single, angle As Single, x1 As Single, y1 As Single) angle = angle / 180 * 3。
    1416 x1 = xo + x0 * Cos(angle) - y0 * Sin(angle) y1 = yo + y0 * Cos(angle) + x0 * Sin(angle) End Sub Private Sub Command1_Click() Dim xo As Single, yo As Single, x0 As Single, y0 As Single, angle As Single, x1 As Single, y1 As Single xo = 1 yo = 1 x0 = 2 y0 = 2 angle = 45 rotation xo, yo, x0, y0, angle, x1, y1 Print x1, y1 End Sub。
    。

类似问题换一批

热点推荐

热度TOP

相关推荐
加载中...

热点搜索 换一换

电脑/网络
C#/.NET
程序设计
电脑装机
操作系统/系统故障
硬件
笔记本电脑
百度
互联网
反病毒
软件
程序设计
C#/.NET
数据库
C/C++
VB
JAVA相关
VC++
汇编语言
其他编程语言
C#/.NET
C#/.NET
举报
举报原因(必选):
取消确定举报