坐标变换

摘要

坐标变换是图形学中很基本的操作。无论绘制二维还是三维图形都会遇到。下面将会讲到:

  1. 如何根据坐标架进行点的坐标变换。
  2. 如何根据坐标架生成变换矩阵。
  3. 如何通过矩阵作点的坐标变换。
  4. 曲线、曲面方程如何作变换。

1、如何根据坐标架进行点的坐标变换

首先坐标架定义成:

struct PNT3D{
  double x,y,z;
};
struct FRAME{
  PNT3D O, OX, OY, OZ;
};

假设有一个点 p 定义在 frame 所在坐标系 WC(World Coordinate) 之中,也就是说 p 在 frame 之外。为了将 p 转入 frame,我们首先需要作平移 p1 = p - frame.O; 这个时候 p1 相当于定义在一个将 WC 平移到 frame.O 的一个坐标架之中。这个坐标架和 frame.O 供用坐标原点,但是三个坐标轴并不一定相同。为了得到 frame 中的三个坐标分量我们只须将 p1 和三个基矢量作点积 :

WC->frame 变换公式:
p2.x = p1*frame.OX = (p-frame.O)*frame.OX;
p2.y = p1*frame.OY = (p-frame.O)*frame.OY;
p2.z = p1*frame.OZ = (p-frame.O)*frame.OZ;

其中 * 代表点积。这里所得到的 p2 就是 WC 中的 p 在 frame 中对应的点。到此为止我们完成了电从坐标架之外变换到坐标架内。同样的,我们也可以采用简单的方法把点从坐标架内变换到坐标架之外。假设 p 是 frame 之内的点,首先

p1 = p.x*frame.OX + p.y*frame.OY + p.z*frame.OZ;

上面的公式将 p 的各个分量作为权值将三个坐标架的基矢量累加起来,得到的 p1 相当于平移 WC 和 frame 重合坐标原点的坐标架中的点。接下来,自然是处理平移

frame->WC 变换公式:
p2 = p1 + freame.O;
 = p.x*frame.OX + p.y*frame.OY + p.z*frame.OZ + frame.O;

p2 就是转换到 WC 的点。

时间: 2024-11-08 23:22:36

坐标变换的相关文章

OpenGL编程轻松入门之坐标变换

本节中的例子仅仅是将第二节的例子作了一点点改动.将myDisplay函数中画三角型的那一部分提出来写成一个函数drawTriangle.然后在myDisplay函数中用drawTriangle():代替原来的语句.这时例3和例1完成的功能完全一样.而此时我们知道坐标的原点在窗口的中心.我们用glTranslate函数改变坐标的原点.同样glTranslate函数后的f和d表明参数的类型.其参数的含义和glVertex中参数的含义一样.坐标原点改变后,我们再调用一次drawTriangle():可

基于VC++的OpenGL编程讲座之坐标变换

OpenGL通过相机模拟.可以实现计算机图形学中最基本的三维变换,即几何变换.投影变换.裁剪变换.视口变换等,同时,OpenGL还实现了矩阵堆栈等.理解掌握了有关坐标变换的内容,就算真正走进了精彩地三维世界. 一.OpenGL中的三维物体的显示 (一)坐标系统 在现实世界中,所有的物体都具有三维特征,但计算机本身只能处理数字,显示二维的图形,将三维物体及二维数据联系在一起的唯一纽带就是坐标. 为了使被显示的三维物体数字化,要在被显示的物体所在的空间中定义一个坐标系.这个坐标系的长度单位和坐标轴的

Qt学习之路(28):坐标变换

经过前面的章节,我们已经能够画出一些东西来,主要就是使用QPainter的相关函数.今天,我们要看的是QPainter的坐标系统. 同很多坐标系统一样,QPainter的默认坐标的原点(0, 0)位于屏幕的左上角,X轴正方向是水平向右,Y轴正方向是竖直向下.在这个坐标系统中,每个像素占据1 x 1的空间.你可以把它想象成是一张坐标值,其中的每个小格都是1个像素.这么说来,一个像素的中心实际上是一个"半像素坐标系",也就是说,像素(x, y)的中心位置其实是在(x + 0.5, y +

html5之Canvas坐标变换应用-时钟实例

在上一篇中我们了解html5的Canvas ,在这一篇中不用多说,写一个html5的时钟应用程序试手.在这里主要设置了坐标变换的平移(translate)和旋转变换(ratate),以及html5 Canvas的路径绘图,beginPath,closePath,rect,arc等,还有就是html5 Canvas路径绘图重要的绘图状态的保存和恢复机制,save,restore.    多的也不说了,直接上代码,有不解的欢迎提问,以及对我的建议指教都可以,. ff下效果图: 代码: <html>

pen 三轴加速度传感器-坐标变换后的旋转角与旋转轴

问题描述 坐标变换后的旋转角与旋转轴 已知旋转后的坐标系x与x'夹角a,y与y'夹角b,z与z'夹角c,x'y'z'为自然坐标系的轴,xyz为旋转后的坐标系轴,怎么求旋转角与旋转轴?用一立方体表示,因为中心点在两斜对角上,是否可以用斜对角的变化来表示? 解决方案 推导坐标旋转公式推导坐标旋转公式坐标旋转公式(推导)

opengl-关于OpenGl设置两次坐标发生坐标变换

问题描述 关于OpenGl设置两次坐标发生坐标变换 解决方案 求大神指导一下两次设置坐标,坐标系统如何设置的是一样的?

《机器人与数字人:基于MATLAB的建模与控制》——2.1节向量、坐标变换和空间描述

2.1向量.坐标变换和空间描述一般情况下,一个向量可以有以下两种不同类型的定义:1点向量--向量仅由它的长度和方向确定,与它的终点位置无关.依据此定义,不管向量的终点位于何处,任意两个长度和符号相同的平行向量相等.为了表示这种类型的向量,通常把终点放置在参考系的原点并用箭头指出方向,坐标值的增加量就构成了点向量.2线向量--向量不仅由它的长度和方向确定,也取决于它的位置.因此,两个不同直线的平行向量,即使有相同长度和符号也被认为是不相等的向量.直观地看,为了准确定义这种线向量,图2-1长度相同的

《HTML5游戏编程核心技术与实战》一2.4 坐标变换

2.4 坐标变换 HTML5游戏编程核心技术与实战在绘制图像的过程中,经常可能需要对图像进行旋转.缩放等变形处理,canvas也提供了一系列的API帮助我们完成这些操作. 关于画布的坐标变换,canvas提供了以下常用的API,这些API的操作必须要在绘制之前调用,否则不会产生任何效果. translate (x, y):平移,把画布的原点坐标移动到(x, y)位置,x表示将坐标原点向左移x个像素,y表示将坐标原点向下移动y个像素.正常情况下canvas的原点坐标位于左上角,那么我们可以通过tr

Swift操作Quartz 2D进行简单的绘图与坐标变换的教程_Swift

Quartz 2D简介Quartz 2D是苹果公司开发的一个二维图形绘制引擎,同时支持iOS和Mac系统. 它是一套基于C的API框架,提供了低级别.轻量级.高保真度的2D渲染.它能完成的工作有: 绘制图形 : 线条\三角形\矩形\圆\弧等 绘制文字 绘制\生成图片(图像) 读取\生成PDF 截图\裁剪图片 自定义UI控件 - Quartz 2D进行绘图iOS绘图技术主要有UIKit,Quartz 2D,Core Animation和OpenGL ES.我们平常对UIKit应该不陌生,而Quar