搜档网
当前位置:搜档网 › 计算机图形学-实验五直线和多边形的裁剪

计算机图形学-实验五直线和多边形的裁剪

大学实验报告

学院:计算机科学与信息学院专业:软件工程班级:102班

** 实验组实验时间指导教师成绩实验工程名称实验五直线和多边形的裁剪

掌握直线段的裁剪算法以及多边形的裁剪算法

验要求熟练掌握直线段的裁剪算法以及多边形的裁剪算法的根本原理,并编写测试代码进展实验。

实验原理

Cohen-Sutherland直线剪裁算法

以区域编码为根底,将窗口及其周围的,8个方向以4 bit的二进制数进展编码。

右图所示的编码方法将窗口及其邻域

分为5个区域:

⑴域:区域(0000)。

⑵上域:区域(1001, 1000, 1010)。

⑶下域:区域(0101, 0100, 0110)。

⑷左域:区域(1001, 0001, 0101)。

⑸右域:区域(1010, 0010, 0110)。

当线段的两个端点的编码的逻辑"与〞非零时,线段为显然不可见的,对*线段的两个端点的区号进展位与运算,可知这两个端点是否同在视区的上、下、左、右;

Cohen-Sutherland直线剪裁算法的算法思想是:

对于每条线段P1P2分为三种情况处理。〔1〕假设P1P2完全在窗口,则显示该线段P1P2简称"取〞之。〔2〕假设P1P2明显在窗口外,则丢弃该线段,简称"弃〞之。〔3〕假设线段既不满足"取〞的条件,也不满足"弃〞的条件,则在交点处把线段分为两段。其

while (code1 != 0 || code2 != 0) {

if ((code1 & code2) != 0) {// 两端点的编码相与不为0,表示直线在窗口外return;

}

if (code1 != 0) {

code = code1;

} else {

code = code2;

}

if ((LEFT & code) != 0) {// 直线的端点与矩形窗口的左边编码相与!=0

* = *L;

y = y1 + (y2 - y1) * (*L - *1) / (*2 - *1);// 求直线与矩形窗口的左边界的交点

} elseif ((RIGHT & code) != 0) {// 直线的端点与矩形窗口的右边编码相与!=0

* = *R;

y = y1 + (y2 - y1) * (*R - *1) / (*2 - *1);// 求直线与矩形窗口的右边界的交点

} elseif ((BOTTOM & code) != 0) {// 直线的端点与矩形窗口的下边编码相与!=0

y = YB;

* = *1 + (*2 - *1) * (YB - y1) / (y2 - y1);// 求直线与矩形窗口的下边界的交点

} elseif ((TOP & code) != 0) {// 直线的端点与矩形窗口的上边编码相与!=0

y = YT;

* = *1 + (*2 - *1) * (YT - y1) / (y2 - y1);// 直线的端点与矩形窗口的上

// 边编码相与!=0

}

if (code == code1) {

*1 = *;

y1 = y;

code1 = encode(*, y);

} else {

*2 = *;

y2 = y;

code2 = encode(*, y);

}

}

g.drawLine((int) (*1 + 0.5), (int) (y1 + 0.5), (int) (*2 + 0.5),(int) (y2 +

0.5));

}

二、多边形裁剪的核心代码为:

通过点集画直线或者多边形:

privatevoid draw() {//通过点集画直线或者多边形

for (int i = 1; i < points.size(); i++) {

Point p1 = new Point();

p1 = points.get(i);

int *1 = (int) p1.get*();

int y1 = (int) p1.getY();

Point p2 = new Point();

p2 = points.get(i - 1);

int *2 = (int) p2.get*();

int y2 = (int) p2.getY();

g.drawLine(*1, y1, *2, y2);

}

}

多边形的裁剪函数:

private Point[] cutPicture(Point[] point, Point[] edge) {// 剪裁函数,参数为〔点集,边〕

Point[] intersectPoint = new Point[20];//存放交点的集合

for (int j = 0; j < 20; j++) {

intersectPoint[j] = new Point();

}

Point s = new Point();

Point p = new Point();

Point t = new Point();

int i = 0;

int length = point.length;

s = point[length - 1];

for (int j = 0; j < length; j++) {

p = point[j];

if (inside(p, edge)) {// sp在窗口,情况1

if (inside(s, edge)) {

intersectPoint[i] = p;

i += 1;

} else {// s在窗口外,情况4

t = intersect(s, p, edge);

intersectPoint[i] = t;

i += 1;

intersectPoint[i] = p;

i += 1;

}

} elseif (inside(s, edge)) {

// s在窗口,p在窗口外,情况3

t = intersect(s, p, edge);

intersectPoint[i] = t;

i += 1;

}// 情况2没有输出

s = p;

}

List tempList = new ArrayList();

for (int k = 0; k < i; k++) {

if (intersectPoint[k] != null) {

Point pt = intersectPoint[k];

tempList.add(pt);

}

}

Point[] temp = new Point[tempList.size()];

for (int j = 0; j < tempList.size(); j++) {

temp[j] = new Point();

temp[j] = tempList.get(j);

}

intersectPoint = temp;

return intersectPoint;

}

判断点是否在裁剪边的可见侧:

privateboolean inside(Point point, Point[] edge) {//判断点是否在裁剪边的可见侧

// 裁剪边为窗口下边

if ((edge[0].y == edge[1].y) && (edge[0].* < edge[1].*)) {

if (point.y >= edge[0].y) {

returntrue;

}

}

// 裁剪边为窗口上边

if ((edge[0].y == edge[1].y) && (edge[0].* > edge[1].*)) {

if (point.y <= edge[0].y) {

returntrue;

}

}

// 裁剪边为窗口右边

if ((edge[0].* == edge[1].*) && (edge[0].y < edge[1].y)) {

if (point.* <= edge[0].*) {

returntrue;

}

}

// 裁剪边为窗口左边

if ((edge[0].* == edge[1].*) && (edge[0].y > edge[1].y)) {

if (point.* >= edge[0].*) {

returntrue;

}

}

returnfalse;

}

直线段与窗口边界求交:

private Point intersect(Point s, Point p, Point[] edge) {//直线段与窗口边界求交,并返回交点

Point t = new Point();

if (edge[0].y == edge[1].y) {// 水平裁剪边

t.y = edge[0].y;

t.* = s.* + (edge[0].y - s.y) * (p.* - s.*) / (p.y - s.y);

} elseif (edge[0].* == edge[1].*) {// 垂直裁剪边

t.* = edge[0].*;

t.y = s.y + (edge[0].* - s.*) * (p.y - s.y) / (p.* - s.*);

}

return t;

}

鼠标的监听类〔部类〕:

class MouseMonitor e*tends MouseAdapter {//通过鼠标的单击获取点,并画出直线或者多边形

publicvoid mouseClicked(MouseEvent e) {

points.add(e.getPoint());

if (points.size() > 1) {

draw();

}

}

}

键盘的监听类〔部类〕:

class KeyMonitor e*tends KeyAdapter {// 键盘控制

publicvoid keyPressed(KeyEvent e) {

switch (e.getKeyCode()) {

case KeyEvent.VK_R:// 清空画布和点集

panel.repaint();

points.removeAll(points);

break;

case KeyEvent.VK_W://对裁剪窗口的处理

g.setColor(Color.RED);

g.drawRect(*L, YB, *R - *L, YT - YB);

//存放裁剪窗口的边

top = new Point[2];// 存放裁剪窗口的上边

top[0] = new Point(*L, YB);

top[1] = new Point(*R, YB);

right = new Point[2];//存放裁剪窗口的右边

right[0] = new Point(*R, YB);

right[1] = new Point(*R, YT);

bottom = new Point[2];//存放裁剪窗口的下边

bottom[0] = new Point(*R, YT);

bottom[1] = new Point(*L, YT);

left = new Point[2];//存放裁剪窗口的左边

left[0] = new Point(*L, YT);

left[1] = new Point(*L, YB);

break;

case KeyEvent.VK_A://对直线段进展裁剪

g.setColor(Color.GREEN);

Point p1 = points.get(0);

Point p2 = points.get(1);

lineCut(p1.get*(), p1.getY(), p2.get*(), p2.getY()); break;

case KeyEvent.VK_B://对多边形进展裁剪

source = new Point[points.size()];//得到多边形的点

for (int i = 0; i < points.size(); i++) {

source[i] = points.get(i);

}

g.setColor(Color.GREEN);

wT = cutPicture(source, top);//得到多边形与裁剪窗口上边的交点

wR = cutPicture(wT, right);//得到多边形与裁剪窗口右边的交点

wB = cutPicture(wR, bottom);//得到多边形与裁剪窗口下边的交点

wL = cutPicture(wB, left);//得到多边形与裁剪窗口左边的交点

第二种情况:线段在裁剪窗口的部,线段完全可见。裁剪后:

第三种情况:线段局部在裁剪窗口的部,局部在裁剪窗口的外部,线段局部可见。裁剪后:

二、多边形裁剪的结果显示:

与直线裁剪操作方式不同的是:在裁剪时点击"B〞键进展裁剪。裁剪后:

实验总结通过本次实验,让我理解并掌握了直线裁剪和多边形裁剪的算法,并成功编写了测试程序进展实验。在本次实验中,有如下两点说明:

(1)通过编写鼠标监听类简化了对输入点的处理,我们可以通过在画布上点击要画的直线或者多边形的顶点来进展程序的输入,而不需要在窗口中输入点的坐标值,简化了操作,而且直接在画布上点击也比拟直观,不必去想要输入那几个点才能构成多边形,输入的点构成的直线和多边形是否符合实验的需求〔即与裁剪窗口的位置关系〕。

(2)本次实验的缺乏在于没有能实现裁剪窗口的任意化,实验的裁剪窗口只局限于矩形窗口,算法缺少普适性。

见签名:年月日

计算机图形学实验报告

计算机图形学 实验报告 学号: 姓名: 班级:计算机 2班 指导老师:何太军 2010.6.19

实验一、Windows 图形程序设计基础 1、实验目的 1)学习理解Win32 应用程序设计的基本知识(SDK 编程); 2)掌握Win32 应用程序的基本结构(消息循环与消息处理等); 3)学习使用VC++编写Win32 Application 的方法。 4)学习MFC 类库的概念与结构; 5)学习使用VC++编写Win32 应用的方法(单文档、多文档、对话框); 6)学习使用MFC 的图形编程。 2、实验内容 1)使用WindowsAPI 编写一个简单的Win32 程序,调用绘图API 函数绘制若干图形。(可选任务) 2 )使用MFC AppWizard 建立一个SDI 程序,窗口内显示"Hello,This is my first SDI Application"。(必选任务) 3)利用MFC AppWizard(exe)建立一个SDI 程序,在文档视口内绘制基本图形(直线、圆、椭圆、矩形、多边形、曲线、圆弧、椭圆弧、填充、文字等),练习图形属性的编程(修改线型、线宽、颜色、填充样式、文字样式等)。定义图形数据结构Point\Line\Circle 等保存一些简单图形数据(在文档类中),并在视图类OnDraw 中绘制。 3、实验过程

1)使用MFC AppWizard(exe)建立一个SDI 程序,选择单文档; 2)在View类的OnDraw()函数中添加图形绘制代码,说出字符串“Hello,This is my first SDI Application”,另外实现各种颜色、各种边框的线、圆、方形、多边形以及圆弧的绘制; 3)在类视图中添加图形数据point_pp,pp_circle的类,保存简单图形数据,通过在OnDraw()函数中调用,实现线、圆的绘制。 4、实验结果 正确地在指定位置显示了"Hello,This is my first SDI Application"字符串,成功绘制了圆,椭圆,方形,多边形以及曲线圆弧、椭圆弧,同时按指定属性改绘了圆、方形和直线。成功地完成了实验。 结果截图: 5、实验体会 通过实验一,了解了如用使用基本的SDI编程函数绘制简单的图

计算机图形学实验报告

计算机图形学 实验报告 实验一:二维线画图元的生成 实验目的:掌握直线段的生成算法,并用C/WIN-TC/VC++实现算法,包括中点法生成直线,微分数值法生成直线段等。 实验内容:用不同的方法生成斜率不同的直线段,比较各种方法的效果。 Bresenham 算法的思想 Bresenham 画法与中点法相似,都是通过每列象素中确定与理想直线最近的像素来进行直线的扫描的转换的。通过各行、各列的象素中心构造一组虚拟网格线的交点,然后确定该列象素中与此交点最近的像素。该算法的巧妙之处在于可以采用增量计算,使得对于每一列,只需要检查一个误差项的符号,就可以确定该列的所有对象。 1.1方法一:直线的中点算法 算法的主要思想: 讨论斜率k ∈[1,+∞)上的直线段的中点算法。 对直线01p p ,左下方的端点为0p (x0,y0),右上方的端点为1p (x1,y1)。直线段的方程为: y m x B =+ ?y y x B x y y x x B x ?= +??=?+?? (,)0F x y xy yx xB ?=?-?-?= 现在假定已求得像素(,,i r i x y ),则如图得

,,11(,]22 i i r i r x x x ∈- + 由于直线的斜率k ∈[1,+∞),故m=1/k ∈(0,1],则 1,,13(,]22i i r i r x x x +∈-+ 在直线1i y y =+上,区间,,13 (,]22i r i r x x -+内存在两个像素NE 和E 。根据取整原则,当 11(,)i i x y ++在中点M 11 (,)2 i i x y ++右方时,取像素NE ,否则取像素E ,即 ,11,,1()()01()()0 i r i i r i r i x E F M x x x NE F M x +++? ?≤=? +?>?i i 点当(,y +1)在左方时点当(,y +1)在右方时 若取2()i d F M =,则上式变为 ,1,,()01(0 i r i i r i r i x E d x x NE d +? ≤=? +>?点当点)当 计算i d 的递推公式如下: ,1 1,12[(2)()]012 2(,2)0 122[(2)(1)] 2 i i r i i i i i i i r x y y x xB d d F x y d x y y x xB ++? ?+-?+-??≤?=++=? >??+-?++-??? =202() i i i i d x d d x y d +?≤?? +?-?>? 算法的初始条件为: 00,00,0(,)(0,0)1 2(,1)22 r r x y x y d F x y x y =? ? ?=++=?-??? 相应的程序示例: 建立成员函数: void MidPointLine4(CDC*pDC,int x0,int y0,int x1,int y1,int color) { /*假定x01*/ int dx,dy,incrE,incrNE,d,x,y; dx=x1-x0; dy=y1-y0; d=2*dx-dy; incrE=2*dx; incrNE=2*(dx-dy); x=x0;y=y0; pDC->SetPixel(x,y,color); while (x

计算机图形学实验五报告

计算机图形学 实验报告 实验(五) 实验题目:二维几何变换 指导老师:吴颖斌 专业:数字媒体技术 班级: 1306班 姓名:燕旱雨(2013100661)

2014年 12月3日

A.直线生成算法 一、实验类型 验证型 二、实验目的和要求 通过二维几何变换的数学模型,编写平移、旋转、放缩、对称变换程序三、实验中用到的硬件设备及软件环境 Visual C++ 6.0和PC机 四、实验主要程序代码 1.平移变换 步骤1:生成正弦曲线 void CMoveCmdView::OnDraw(CDC* pDC) { CMoveCmdDoc* pDoc = GetDocument(); ASSERT_V ALID(pDoc); // TODO: add draw code for native data here int x,y,px,py,xx,yy,dx,dy; double hx; CPoint tp; for(x=-180;x<=180;x++) { hx=x*3.1415926/180; y=(int)(100*sin(hx)); //正弦函数 px=320+x;py=240-y; tp.x=px;tp.y=py; pDC->SetPixel(tp,RGB(255,0,0)); } } 运行结果查看图1 步骤2:将曲线沿x方向,按每隔10个像素平移一次: 将for(x=-180;x<=180;x++){…}插入以下循环语句内: for (xx=-50;xx<=50;xx=xx+10) {} 并且将px=320+x改为:px=320+x+xx。 运行结果查看图2 步骤3:将曲线沿y方向,按每隔10个像素平移一次: 将for(x=-180;x<=180;x++){…}插入以下循环语句内: for (yy=-50;yy<=50;yy=yy+10){}

计算机图形学实验报告实验2裁剪算法实验

一、实验目的: 直线段的裁剪:编码裁剪算法,中点分割裁剪算法。 二、实验内容: //BasicGraph.cpp //请将下列裁剪程序补充完整,并用注释说明是何种裁剪算法 void Encode (int x,int y,int *code,int XL,int XR,int YB,int YT) { //请将此程序补充完整 int c=0; if(xXR) c=c|RIGHT; if(yYT) c=c|TOP; (*code)=c; } //编码裁剪算法: void C_S_Line(POINT &p1,POINT &p2,int XL,int XR,int YB,int YT) { //请将此程序补充完整 int x1,x2,y1,y2,x,y,code1,code2,code; x1=p1.x; x2=p2.x; y1=p1.y; y2=p2.y; Encode(x1,y1,&code1,XL,XR,YB,YT); Encode(x2,y2,&code2,XL,XR,YB,YT); while(code1!=0||code2!=0) { if((code1&code2)!=0) return; code=code1; if(code1==0) code=code2; if((LEFT&code)!=0) {x=XL;y=y1+(y2-y1)*(XL-x1)/(x2-x1);} else if((RIGHT&code)!=0) {x=XR;y=y1+(y2-y1)*(XR-x1)/(x2-x1);} if((BOTTOM&code)!=0) {y=YB;x=x1+(x2-x1)*(YB-y1)/(y2-y1);} else if((TOP&code)!=0) {y=YT;x=x1+(x2-x1)*(YT-y1)/(y2-y1);} if(code==code1) {x1=x;y1=y;Encode(x,y,&code1,XL,XR,YB,YT);} else {x2=x;y2=y;Encode(x,y,&code2,XL,XR,YB,YT);} }

计算机图形学实验报告

计算机图形学实验报告 计算机图形学实验报告 引言 计算机图形学是研究计算机生成和处理图像的学科,它在现代科技和娱乐产业中扮演着重要的角色。本实验报告旨在总结和分享我在计算机图形学实验中的经验和收获。 一、实验背景 计算机图形学实验是计算机科学与技术专业的一门重要课程,通过实践操作和编程,学生可以深入了解图形学的基本原理和算法。本次实验主要涉及三维图形的建模、渲染和动画。 二、实验内容 1. 三维图形建模 在实验中,我们学习了三维图形的表示和建模方法。通过使用OpenGL或其他图形库,我们可以创建基本的几何体,如立方体、球体和圆柱体,并进行变换操作,如平移、旋转和缩放。这些基本操作为后续的图形处理和渲染打下了基础。 2. 光照和着色 光照和着色是图形学中重要的概念。我们学习了不同的光照模型,如环境光、漫反射和镜面反射,并了解了如何在三维场景中模拟光照效果。通过设置材质属性和光源参数,我们可以实现逼真的光照效果,使物体看起来更加真实。3. 纹理映射 纹理映射是一种将二维图像映射到三维物体表面的技术。通过将纹理图像与物

体的顶点坐标相对应,我们可以实现更加细致的渲染效果。在实验中,我们学 习了纹理坐标的计算和纹理映射的应用,使物体表面呈现出具有纹理和细节的 效果。 4. 动画和交互 动画和交互是计算机图形学的重要应用领域。在实验中,我们学习了基本的动 画原理和算法,如关键帧动画和插值技术。通过设置动画参数和交互控制,我 们可以实现物体的平滑移动和变形效果,提升用户体验。 三、实验过程 在实验过程中,我们首先熟悉了图形库的使用和基本的编程技巧。然后,我们 按照实验指导书的要求,逐步完成了三维图形建模、光照和着色、纹理映射以 及动画和交互等任务。在实验过程中,我们遇到了许多挑战和问题,但通过不 断的尝试和调试,最终成功实现了预期的效果。 四、实验结果 通过实验,我们成功实现了三维图形的建模、渲染和动画效果。我们可以通过 键盘和鼠标控制物体的移动和变形,同时观察到真实的光照效果和纹理映射效果。实验结果符合预期,并且在实验报告中附上了实验截图和代码片段供参考。 五、实验总结 通过本次计算机图形学实验,我深入了解了三维图形的建模和渲染原理,掌握 了OpenGL等图形库的使用方法。同时,我也学会了如何应用光照、纹理映射 和动画等技术,使图形更加真实和生动。通过实验,我不仅提升了编程能力, 还培养了团队合作和问题解决的能力。 六、展望未来

计算机图形学编码裁剪算法c语言程序

编码裁剪算法 一,实验名称:编码裁剪算法 二,实验目的和意义:窗口内的图形显示,超出窗口边框的图形不予显示。这个过程就是裁剪过程,它在图形显示及窗视口变换中经常用到,对工程图形进行裁剪时,编码裁剪是一种有效的裁剪方法,通过该实验,了解和掌握编码裁剪的原理和方法。从而快速地处理显示区内的图形。 三,实验原理;将绘图所在平面分成九个区域,每 个区域用一个四位的二进制数来表示,0000、 0001、0010、1001、1000、1010、0101、0100、 0110,如果线段两个端点的4位编码全为0,表 示线段全部在窗口内,可直接接受并加以显示; 如果对线段两个端点的4位编码进行逻辑与运 算,结果为非0,则此线段全部在窗口外,可直 接舍弃加以裁减;否则,计算直线和窗口边框 线的交点,再计算交点的特征码;重复这一过 程,直到全部线段均被裁减掉或接受为止。 四,实验内容; 算法改编成C语言程序,给定一窗口区域(50,50,200,100),随机生成5条直线,对其进行裁剪处理,将处理结果加以显示。 五,算法步骤; 给定一窗口区域。 计算各区的特征码。 随机给定一条直线的两端上。 计算两端点对应的特征码。 如果两端点都在窗口内,直接显示。 如果有端点在窗口外,则判断它和哪个边框有交点。求出直线和对应边框线交点。在计算交点的特征码,重复前面的。 六,程序代码; /*说明;(x1,y1)和(x2,y2)为线段的两个端点。*/ #include"graphics.h" #include"stdio.h" #include"math.h" #define LEFT 1 #define RIGHT 2 #define BOTTOM 4 #define TOP 8 int x1=50,y1=50,x2=450,y2=350,xl=100,x r=400,yb=300,yt=100; int encode(int x,int y,int*code) { int c; c=0; if(xxr) c=RIGHT; if(y>yb)

计算机图形学-实验五直线和多边形的裁剪

大学实验报告 学院:计算机科学与信息学院专业:软件工程班级:102班 ** 实验组实验时间指导教师成绩实验工程名称实验五直线和多边形的裁剪 实 验 目 的 掌握直线段的裁剪算法以及多边形的裁剪算法 实 验要求熟练掌握直线段的裁剪算法以及多边形的裁剪算法的根本原理,并编写测试代码进展实验。 实验原理 Cohen-Sutherland直线剪裁算法 以区域编码为根底,将窗口及其周围的,8个方向以4 bit的二进制数进展编码。 右图所示的编码方法将窗口及其邻域 分为5个区域: ⑴域:区域(0000)。 ⑵上域:区域(1001, 1000, 1010)。 ⑶下域:区域(0101, 0100, 0110)。 ⑷左域:区域(1001, 0001, 0101)。 ⑸右域:区域(1010, 0010, 0110)。 当线段的两个端点的编码的逻辑"与〞非零时,线段为显然不可见的,对*线段的两个端点的区号进展位与运算,可知这两个端点是否同在视区的上、下、左、右; Cohen-Sutherland直线剪裁算法的算法思想是: 对于每条线段P1P2分为三种情况处理。〔1〕假设P1P2完全在窗口,则显示该线段P1P2简称"取〞之。〔2〕假设P1P2明显在窗口外,则丢弃该线段,简称"弃〞之。〔3〕假设线段既不满足"取〞的条件,也不满足"弃〞的条件,则在交点处把线段分为两段。其

while (code1 != 0 || code2 != 0) { if ((code1 & code2) != 0) {// 两端点的编码相与不为0,表示直线在窗口外return; } if (code1 != 0) { code = code1; } else { code = code2; } if ((LEFT & code) != 0) {// 直线的端点与矩形窗口的左边编码相与!=0 * = *L; y = y1 + (y2 - y1) * (*L - *1) / (*2 - *1);// 求直线与矩形窗口的左边界的交点 } elseif ((RIGHT & code) != 0) {// 直线的端点与矩形窗口的右边编码相与!=0 * = *R; y = y1 + (y2 - y1) * (*R - *1) / (*2 - *1);// 求直线与矩形窗口的右边界的交点 } elseif ((BOTTOM & code) != 0) {// 直线的端点与矩形窗口的下边编码相与!=0 y = YB; * = *1 + (*2 - *1) * (YB - y1) / (y2 - y1);// 求直线与矩形窗口的下边界的交点 } elseif ((TOP & code) != 0) {// 直线的端点与矩形窗口的上边编码相与!=0 y = YT; * = *1 + (*2 - *1) * (YT - y1) / (y2 - y1);// 直线的端点与矩形窗口的上

cohensutherland裁剪算法实验报告

cohensutherland裁剪算法实验报告 Cohen-Sutherland裁剪算法是一种用于计算机图形学中线段裁剪的算法。该算法用于确定一个给定的线段是否跨越了一个裁剪窗口,并且在必要的情况下将该线段裁剪到窗口内。Cohen-Sutherland算法是一种基于二进制编码的线框裁剪算法,其运算速度很快,广泛应用于计算机图形学中。 实验内容: 本次实验主要内容是使用Cohen-Sutherland裁剪算法对线段图形进行裁剪。具体实验过程如下: 1. 对于给定的线段和裁剪窗口,首先需要对线段进行编码。 2. 判断线段是否在裁剪窗口内。如果线段的两个端点都在裁剪窗口内,则该线段完全位于裁剪窗口内,不需要进行裁剪。 3. 如果线段的两个端点都在裁剪窗口外,则该线段完全位于裁剪窗口外,在此情况下可以直接将该线段丢弃。 4. 如果线段的一个端点在裁剪窗口内,而另一个端点在裁剪窗口外,则需要对该线段进行裁剪。

5. 根据线段的编码,在裁剪窗口的不同区域内确定该线段与裁剪窗口的相交点。 6. 在裁剪窗口内,将线段裁剪到与裁剪窗口相交的部分,并输出裁剪后的线段。实验步骤: 本次实验使用Python语言编写程序,具体代码实现如下: # 定义裁剪窗口的左,下,右,上位置 LEFT = 100 BOTTOM = 100 RIGHT = 500 TOP = 400 # 定义编码区域 INSIDE = 0 LEFT_EDGE = 1 RIGHT_EDGE = 2 BOTTOM_EDGE = 4 TOP_EDGE = 8

# 定义裁剪函数 def cohen_sutherland(x1, y1, x2, y2): # 对线段进行编码 code1 = encode(x1, y1) code2 = encode(x2, y2) accept = False while True: # 如果两端点都在裁剪窗口内 if code1 == INSIDE and code2 == INSIDE: accept = True break # 如果两端点都不在裁剪窗口内 elif (code1 & code2) != 0: break # 如果有一个端点在裁剪窗口内,但另一个端点不在 else: x = 0 y = 0 if code1 != INSIDE: code_out = code1 else:

计算机图形学实验报告

实验报告 一、实验目的 1、掌握有序边表算法填充多边形区域; 2、理解多边形填充算法的意义; 3、增强C语言编程能力。 二、算法原理介绍 根据多边形内部点的连续性知:一条扫描线与多边形的交点中,入点和出点之间所有点都是多边形的内部点。所以,对所有的扫描线填充入点到出点之间所有的点就可填充多边形。 判断扫描线上的点是否在多边形之内,对于一条扫描线,多边形的扫描转换过程可以分为四个步骤: (1)求交:计算扫描线与多边形各边的交点; (2)排序:把所有交点按x值递增顺序排序; (3)配对:第一个与第二个,第三个与第四个等等;每对交点代表扫描线与多边形的一个相交区间; (4)着色:把相交区间内的象素置成多边形颜色,把相交区间外的象素置成背景色。 p1,p3,p4,p5属于局部极值点,要把他们两次存入交点表中。如扫描线y=7上的交点中,有交点(2,7,13),按常规方法填充不正确,而要把顶点(7,7)两次存入交点表中(2,7,7,13)。p2,p6为非极值点,则不用如上处理。

为了提高效率,在处理一条扫描线时,仅对与它相交的多边形的边进行求交运算。把与当前扫描线相交的边称为活性边,并把它们按与扫描线交点x坐标递增的顺序存放在一个链表中,称此链表为活性边表(AET)。 对每一条扫描线都建立一个与它相交的多边形的活性边表(AET)。每个AET的一个节点代表一条活性边,它包含三项内容 1.x -当前扫描线与这条边交点的x坐标; 2.Δx -该边与当前扫描线交点到下一条扫描线交点的x增量; 3.ymax -该边最高顶点相交的扫描线号。 每条扫描线的活性边表中的活性边节点按照各活性边与扫描线交点的x值递增排序连接在一起。 当扫描线y移动到下一条扫描线y = y+1时,活性边表需要更新,即删去不与新扫 描线相交的多边形边,同时增加与新扫描线相交的多边形边,并根据增量法重新计算扫描线与各边的交点x。 当多边形新边表ET构成后,按下列步骤进行: ①对每一条扫描线i,初始化ET表的表头指针ET[i]; ②将ymax = i的边放入ET[i]中; ③使y =多边形最低的扫描线号; ④初始化活性边表AET为空; ⑤循环,直到AET和ET为空。 ●将新边表ET中对应y值的新边节点插入到AET表。 ●遍历AET表,将两两配对的交点之间填充给定颜色值。 ●遍历AET表,将 ymax= y的边节点从AET表中删除,并将ymax> y的各 边节点的x值递增Δx;并重新排序。 ●y增加1。 三、程序源代码 #include "graphics.h" #define WINDOW_HEIGHT 480 #define NULL 0 #include "alloc.h" #include "stdio.h" #include "dos.h" #include "conio.h"

计算机图形学实验报告

《计算机图形学》 实验报告 学号:0908610211 姓名:宋雪英 班级:计算机0961 项目: 1.利用其它两种画直线方法实现放大10陪显示方法,交互式画直线,预先定义直线段的起止端点,每点击一次鼠标左键,画出直线上的一点,直到终点为止。 2.利用方形、线性两种画刷来绘制圆和椭圆。 3.实现交互式二维图形的放缩,旋转和对称变换 2012年12月25日

基本图形的生成技术 一、实验目的 在一个图形系统中,基本图形(也称为图元、图素等)的生成技术是最基本的,任何复杂的图形都是由基本图形组成的,基本图形生成的质量直接影响该图形系统绘图的质量。所以,需要设计出精确的基本图形生成算法,以确保图形系统绘图的精确性。本次实验的目的就是利用Bresenham 算法和中心画线法两种画直线方法实现放大10陪显示方法,交互式画直线,预先定义直线段的起止端点,每点击一次鼠标左键,画出直线上的一点,直到终点为止。利用方形、线性两种画刷来绘制圆和椭圆。实现交互式二维图形的放缩,旋转和对称变换。 二、实验任务 1.利用其它两种画直线方法实现放大10陪显示方法,交互式画直线,预先定义直线段的起止端点,每点击一次鼠标左键,画出直线上的一点,直到终点为止。 2.利用方形、线性两种画刷来绘制圆和椭圆。 3.实现交互式二维图形的放缩,旋转和对称变换。 三、画直线的实验内容 任务一:利用其它两种画直线方法实现放大10陪显示方法交互式画直线,预先定义直线段的起止端点,每点击一次鼠标左键,画出直线上的一点,直到终点为止。 1、设计思路 第一步:建立DDAMouseLine工程文件; 第二步:向视图类中添加自定义的成员变量 用鼠标右键单击视图类,选择“Add Member Variable…”,添加下面三个成员变量。 proctected : CPoint m_p1; //起点 CPoint m_p2; //起点 CPoint m_p; //点击鼠标时点的取值 第三步:向视图类中添加自定义的成员函数原型:

vatti裁剪算法

vatti裁剪算法 Vatti裁剪算法是计算机图形学中非常重要的一种算法,它可以对图形进行裁剪以避免渲染过多无用区域,提高图形渲染效率。下面,我将 详细介绍Vatti裁剪算法的原理及其使用方法。 一、概述 Vatti裁剪算法最初由Vatti在1984年提出,并在1992年得到了完整的形式化描述。该算法主要用于多边形裁剪,它将多边形的裁剪视为 一系列直线段的计算,从而避免了复杂的多边形运算,减少了计算量。 二、原理 Vatti裁剪算法的原理可以简单概括为:将裁剪区域表示为一系列半平面的交集,将多边形表示为一系列线段的并集,然后对这两个集合进 行运算,得到裁剪后的多边形。 具体来说,Vatti裁剪算法主要分为两个阶段:首先将裁剪区域表示为 n个闭合的凸多边形的交集,然后将多边形分解为线段,并依次对每个线段进行裁剪运算。 1. 裁剪区域的表示 a. 输入:在平面上给出n个凸多边形,表示为每个多边形的顶点。 b. 输出:一个表示裁剪区域的半平面集合。 c. 算法步骤:

(1) 将每个凸多边形表示为一系列有向线段。 (2) 对每个有向线段Si,计算其左侧半平面:对于多边形中的每个顶点Vj,如果它在Si的左侧,则计算对应的另一个有向线段S'j,使得S'j与Si组成一个包含多边形的半平面。 (3) 重复步骤2,以便得到n个半平面。 (4) 对这n个半平面进行交集运算,得到裁剪区域。 2. 多边形裁剪 a. 输入:一个表示多边形的线段集合,以及表示裁剪区域的半平面集合。 b. 输出:裁剪后的多边形。 c. 算法步骤: (1) 将多边形表示为一系列线段的并集。 (2) 对于每条线段Si,计算其与半平面集合的交集。 (3) 将线段的交集组成一个新的集合S',作为裁剪后的多边形。 三、使用方法 1. 准备工作 在进行Vatti裁剪算法之前,需要准备好多边形的顶点和裁剪区域的半平面集合。多边形的顶点可以通过手动或程序计算得到,而裁剪区

计算机图形学之线段裁剪

计算机图形学之线段裁剪 五道大题:DDA 算法、Bresenham 算法、中点画圆法、线段裁剪、多边形裁剪 线段裁剪期末占20分 Example : Clipping window with x wmin =6. x wmax =12, y wmin =5, y wmax =10, clip the line P 1(8,2) P 2(14,12) Answer: 1.define region code To P 1 bit 1 is sign bit (x-x wmin =8-6=2), ∴ bit 1 is 0 bit 2 is sign bit (x wmax -x=12-8=4), ∴ bit 2 is 0 bit 3 is sign bit (y-y wmin =2-5=-3), ∴ bit 3 is 1 bit 4 is sign bit (y wmax -y=10-2=8), ∴ bit 4 is 0 so code1 is 0100 P 2 is same to P 1, code2 is 1010 2.test code1∨code2=1110 not False ,∴ two endpoint are not inside window code1∧code2=0000 not true ,∴ two endpoint are not outside some boundary 3. Several test from left →right →bottom → top ①to left boundary bit1 of code1 is 0,bit 1 of code2 is 0 P 1 and P 2 are inside left boundary , save it to next test ②to right boundary,bit 2 of code1 is 0,bit 2 of code2 is 1, ∴ have intersection To the line equation 2)8(35+-= x y , when x=x wmax =12 get 3 28=y x wmin <x <x wmax , ∴ code of P 2' is 0000 ③to bottom boundary , bit 3 of code1 is 1, bit 2 of code 2 is 0, ∴ have intersection To line equation 2)8(35+-= x y , when y=y wmin =5 Get 5 49=x y wmin <y <y wmax , ∴ code of P 1' is 0000 ④to top boundary,bit 4 of code1 is 0, bit 4 of code 2 is 0.save P 1' P 2' save P 1')5,549 ( P 2')328,12( to display

计算机图形学-知识点

一,填空 1.构成图形的要素包括()和(),在 计算机表示图形的方法有两种,他们是()和(). 2.填充一个特定区域,其属性选择包括(), ()和(). 3.平行投影根据()可以分为()投影 和()投影. 4.字符的图形表示可以分为()和() 两种形式. 5.计算机中表示带有颜色及形状信息的图和形常用()和参数法, 其中用参数法描述的图形称为(),用()描述的图形称为(). 6.文字裁减的方法包括(),()和 ()。 7.平面几何投影根据()可以分为() 和(). 二,名词解释 1.什么是光点什么是象素点什么是显示器的分辨率 2.扫描线,水平回扫期,垂直回扫期,查色表,帧缓冲器容量,刷新,刷新频率,扫描转 换 3.图像,图形:,像素点:,混淆: 4.直线线宽的处理方式,线型控制方法 5.区域填充,4连通区域,8连通区域:,四连通区域与八连通区域有什么区别 6.视区,齐次坐标,固定坐标系与活动坐标系 7.投影中心,投影面,投影线,观察坐标系,观察参考点,投影参考点,观察空间,灭点, 主灭点,规范视见体 8.投影变换,透视投影 9.构成图形的要素,在计算机中如何表示它们 10.明度,亮度,饱和度,计算机图形显示器和绘图设备表示颜色的方法各是什么颜色模型 (rgb模型、cmy模型、hsv模型的定义、应用场合)? 扫描转换: 1.扫描转换直线段的方法有哪些?画圆弧的算法有哪几种? 2.直线段的DDA算法、中点算法的基本原理 3.圆弧和椭圆弧的中点算法 4.直线的中点算法较DDA算法的优点 5.生成圆弧的正负法 扫描转换多边形: 1.扫描转换多边形的各种算法 a)逐点判断算法:原理 b)扫描线算法:原理,应用 c)边缘填充算法:原理 2.扫描转换扇形区域:原理 3.区域填充:原理

计算机图形学裁剪算法详解

裁剪算法详解 在使用计算机处理图形信息时,计算机内部存储的图形往往比较大,而屏幕显示的只是图的一部分。因此需要确定图形中哪些部分落在显示区之内,哪些落在显示区之外,以便只显示落在显示区内的那部分图形。这个选择过程称为裁剪。最简单的裁剪方法是把各种图形扫描转换为点之后,再判断各点是否在窗内。但那样太费时,一般不可取。这是因为有些图形组成部分全部在窗口外,可以完全排除,不必进行扫描转换。所以一般采用先裁剪再扫描转换的方法。 (a)裁剪前(b) 裁剪后 图1.1 多边形裁剪 1直线段裁剪 直线段裁剪算法比较简单,但非常重要,是复杂图元裁剪的基础。因为复杂的曲线可以通过折线段来近似,从而裁剪问题也可以化为直线段的裁剪问题。常用的线段裁剪方法有三种:Cohen-Sutherland,中点分割算法和梁友栋-barskey算法。 1.1 Cohen-Sutherland裁剪 该算法的思想是:对于每条线段P 1P 2 分为三种情况处理。(1)若P 1 P 2 完 全在窗口内,则显示该线段P 1P 2 简称“取”之。(2)若P 1 P 2 明显在窗口外,则 丢弃该线段,简称“弃”之。(3)若线段既不满足“取”的条件,也不满足“弃”的条件,则在交点处把线段分为两段。其中一段完全在窗口外,可弃之。然后对另一段重复上述处理。 为使计算机能够快速判断一条直线段与窗口属何种关系,采用如下编码方法。延长窗口的边,将二维平面分成九个区域。每个区域赋予4位编码CtCbCrCl.其中各位编码的定义如下:

图1.2 多边形裁剪区域编码图5.3线段裁剪 裁剪一条线段时,先求出P1P2所在的区号code1,code2。若code1=0,且code2=0,则线段P1P2在窗口内,应取之。若按位与运算code1&code2≠0,则说明两个端点同在窗口的上方、下方、左方或右方。可判断线段完全在窗口外,可弃之。否则,按第三种情况处理。求出线段与窗口某边的交点,在交点处把线段一分为二,其中必有一段在窗口外,可弃之。在对另一段重复上述处理。在实现本算法时,不必把线段与每条窗口边界依次求交,只要按顺序检测到端点的编码不为0,才把线段与对应的窗口边界求交。 Cohen-Sutherland裁减算法 #define LEFT 1 #define RIGHT 2 #define BOTTOM 4 #define TOP 8 int encode(float x,float y) { int c=0; if(xXR) c|=RIGHT; if(x

计算机图形学考核题库(第五章图形裁剪)

第五章图形裁剪 一、选择题: 1、在多边形的逐边裁剪法中,对于某条多边形的边(方向为从端点S到端点P)与某条裁剪线(窗口的某一边)的比较结果共有以下四种情况,分别需输出一些顶点.请问哪种情况下输出的顶点是错误的() A. S和P均在可见的一侧, 则输出S和P. B. S和P均在不可见的一侧, 则输出0个顶点. C. S在可见一侧, P在不可见一侧, 则输出线段SP与裁剪线的交点. D. S在不可见的一侧, P在可见的一侧, 则输出线段SP与裁剪线的交点和P. 2、使用Weiler-Atherton算法进行多边形裁减,顶点按逆时针顺序表示的多边形P的各个顶点中,哪些属于进点(灰色为裁减窗口)?() A. p1, p2, p3 B. 1, 3 C. 2, 4 D. 1, 2, 3, 4 3、使用Weiler-Atherton算法进行多边形裁减,下面的顶点按照逆时针顺序表示的多边形P 各个顶点中,哪些属于进点(灰色为裁减窗口)?() A. P1, P2, P3, P4, P5; B. 1, 3, 5 C. 2, 4, 6 D. 1, 2, 3, 4 4. 中点分割法求交点的规则,当线段P1P2求出中点P后,如果P1与P不同侧,移动P2点,P1与P不同侧的表达式为:()。 A. (C1&& C)!=0 B. (C1& C)!=0 C. (C1&& C)= =0

D. (C1& C)= =0 5. 直线的编码裁剪算法中,判断直线是否位于同一边界外侧的表达式()。 A. (c1&&c2)!=0 B. (c1&&c2)=0 C. (c1&c2)!=0 D. (c1&c2)=0 6. 如图,用Cohen-Sutherland编码算法,对直线作裁剪。已知窗口左下角坐标(50,50),右上角坐标(300,300),直线两个端点的坐标为(150,30)和(330,250),直线两个端点的编码分别为:() A. 1001 B. 0000 C. 0010 D. 0110 E. 0100 F. 0101 7. 用Weiler-Atherton多边形裁剪算法进行内裁剪时,当被裁剪多边形和裁剪窗口的顶点序列都按顺时针方向排列,正确的裁剪思想为()。 A. 碰到入点,沿被裁剪多边形按顺时针方向搜集顶点序列 B. 碰到入点,沿被裁剪多边形按逆时针方向搜集顶点序列 C. 碰到入点,沿裁剪窗口按逆时针方向搜集顶点序列 D. 碰到出点,沿裁剪窗口按逆时针方向搜集顶点序列 E. 碰到出点,沿裁剪窗口按顺时针方向搜集顶点序列 F. 碰到出点,沿被裁剪多边形按顺时针方向搜集顶点序列 8. 多边形裁剪后,新的结果多边形含有:()。 A. 若干原始多边形在界内的顶点 B. 必须有窗口顶点 C. 可能有窗口顶点 D. 交点 E. 原始多边形在界外的顶点 F. 其他顶点 二、判断题: 1.Weiler-Atherton多边形裁减算法可以处理任何非自相交多边形。() 2.Sutherland-Hodgman多边形裁减算法可以处理任何非自相交多边形。()

计算机图形学

计算机图形学 1. 假设一条空间直线段的端点为P(x0,y0,z0)和 Q(x1,y1,z1),则直线段可用R(t)=(1-t)P+tQ参数表示。 2. OpenGL中,glRotatef函数用于旋转。 3.背面剔除算法利用视线方向V和物体表面法向N之间的关系,N·V>0为可见。 4. 二维线裁剪主要方法不包括Sutherland-Cohen 裁剪。 5. 直线段两端点坐标分别是P(1,2,4)和Q(4,2,10),直线上距离Q点为1/3线段PQ长度的点坐标是(2,2,6)。 6. 将顶点(2,3)向右平移2个单位长度,向下平移1个单位长度后变为(4,2)。 7. 能较好的模拟高光的光照模型是Phong。 8. 类似于三角形带或三角形扇这样的复合结构,将把处理与传输m个三角形的代价从3m个顶点降到m+2个顶点。 9. 透视投影中主灭点最多可以有3个。 10. 景物空间消隐的时间复杂度为O(N)。(n为物体个数,N为像素个数) 11. 透视投影中,投影平面取作与视线方向(N方向)垂直的平面n = d。假设在视点坐标系中的点为(u,v,n),那么在投影面上的对应点坐标(up,vp)为 up=u/(n/d) vp=v/(n/d)。

12. 二维图形变换主要有三类,不包括俯仰。 13. OpenGL光照模型中最终的光照效果可以分为四个组成部分,不包括折射光。 14. 在三维变换流程图中,规格化设备坐标系到屏幕坐标系的变换是视窗变换。 15. 图像空间消隐的时间复杂度为(n为物体个数,N 为像素个数)O(nN)。 16. 立方体表示为下图,是平行投影 17.光栅显示器上的图像是由光栅(raster)形成 的,光栅是一组互相平行的水平扫描线,每行扫描线是由大小一致的显示单元组成的显示序列,每一显示单元称为一个像素。 18.Phong镜面反射光照模型用 I=Kala+Kdlecosa+Kslecosny表示。 19.OpenGL中定义三维点使用gIVertex3f0函数 20.几何纹理映射不包括颜色映射 21.影视特技是计算机图形学应用领域之一。 22. 光线跟踪算法对计算性能要求不高这句话是 错误的。

《计算机图形学》课程教学大纲

《计算机图形学》课程教学大纲 课程编号:20211501 总学时数:32(理论18、实验14) 总学分数:2 课程性质:专业基础课 适用专业:地理信息系统 一、课程的任务和基本要求: 课程任务: 通过学习本课程,使学生加深对计算机图形学理论知识的理解;了解和掌握计算机图形学的基本编程技能与方法,培养独立分析解决问题的能力,具备一定的图形应用系统开发能力。 基本要求: 掌握线段、圆等各类图形的生成方法、区域填充方法、线段和区域的裁剪方法、反走样方法和图形变换等理论方法,并用编程语言进行编程,在计算机上实现相关方法和算法。 二、基本内容和要求: 第1章图形设备、系统和应用 1.1 计算机图形学的发展及应用 1.2 图形输入设备 1.3 图形显示设备 1.4 图形绘制设备 1.5 图形系统和工作站 要求:了解计算机图形学的发展阶段和基本应用,以及图形系统的软硬件构成 第2章交互技术与用户接口 2.1 用户接口的常用形式 2.2 交互设备和交互任务 2.3 输入控制 2.4 如何构造一个交互系统 要求:了解系统与用户之间的交互技术和用户接口,掌握构造交互系统的基本方法第3章基本图形生成算法 3.1 直线的扫描转换 3.2 圆与椭圆的扫描转换 3.3 区域填充 3.4 线宽与线型的处理 3.5 裁剪 要求:掌握基本图形的各类生成算法原理,并用编程语言实现 第4章曲线和曲面 4.1 基础知识 4.2 常用的参数曲线 4.3 常用的参数曲面 要求:掌握曲线和曲面的生成算法原理,并用编程语言实现 第5 图形变换 第5章图形变换 5.1 窗口视图变换 5.2 几何变换 5.3 形体的投影变换 要求:掌握图形变换基本理论和计算,并用编程语言实现

计算机图形学-习试题库答案

- 1、计算机图形显示器和绘图设备表示颜色的方法各是什么颜色系统?它们之间的关系如何? 1、计算机图形显示器是用RGB方法表示颜色,而绘图设备是用CMY方法来表示颜色的。它们之间的关系是:两者都是面向硬件的颜色系统,前者是增性原色系统,后者是减性原色系统,后者是通过在黑色里加入一种什么颜色来定义一种颜色,而后者是通过指定从白色里减去一种什么颜色来定义一种颜色 2、简述帧缓存与显示器分辨率的关系。分辨率分别为640×480,1280×1024,和2560×2048的显示器各需要多少字节位平面数为24的帧缓存? 2、帧缓存的大小和显示器分辨率之间的关系是:帧缓存的大小=显示器分辨率的大小*帧缓存的 3、画直线的算法有哪几种?画圆弧的算法有哪几种? c1)逐点比较法;(2)数值微分法;(3)Bresenham算法。 画弧线的常用方法有:(1)逐点比较法;(2)角度DDA法;(3)Bresenham算法。 4、分别写出平移、旋转、缩放及其组合的变换矩阵。 4、 1)平移变换: 其中, , , 是物体在三个坐标方向上的位移量。 2)旋转变换: 绕Z轴旋转的公式为: 绕X轴旋转的公式为: 绕Y轴旋转的公式为: 如果旋转所绕的轴不是坐标轴,设其为任意两点p1,p2所定义的矢量,旋转角度为。则可由7个基本变换组合构成: 1.使p1,点与原点重合;

2.,使轴p1p2落入平面xoz; 3.,使p1p2与z轴重合; 4.,执行绕p1p2轴的角旋转; 5.,作3的逆变换; 6.,作2的逆变换; 7.作1的逆变换。 3)缩放变换: 其中,,,是物体在三个方向上的比例变化量。记为。 若对于某个非原点参考点进行固定点缩放变换,则通过如下的级联变换实现: 5、如何用几何变换实现坐标系的变换? 坐标系的变换,亦即将某一坐标系lcs1中的点变换为另一个坐标系lcs2下的坐标。若,矩阵的推导分三步。 1)将lcs1中的点变换到世界坐标系的矩阵 ; x_axis, y_axis, z_axis 为lcs1中x,y,z轴矢量在世界坐标系的表示 org为lcs1中原点在世界坐标系的表示 2)将世界坐标系的点变换到lcs2中的点矩阵 ; x_axis, y_axis, z_axis 为lcs1中x,y,z轴矢量在世界坐标系的表示

相关主题