等角投影及计算公式

等角投影中,没有消失点,观察者的目光始终是平行的,投影方向与坐标轴的角度是固定值,虽然这样看上去略有失真,但是总体来讲立体感还是很明显的,重要的是:不管你把等角投影所形成的立体图形放在屏幕上哪一个位置,看上去都是相同的。

原书作者还给出了一个演示,用于帮助大家理解:在线演示

很明显:一个立方体的(正方形)顶部面,在经过等角投影后,在屏幕上会发生形变,成为一个菱形。(点击刚才的在线演示中的true isometric按钮,观察front视图中立方体的顶部)

上图是正方形经过标准等角投影后得到的菱形,其左右侧的角度为60度,通过计算可以得到长宽比例为1.73,但是这个比例通常在计算时,会弄出很多小数位,而且绘图师们也比较烦这个比例(因为用ps等软件画图时,同样也要设置长或宽为小数位才能保证这个比例)

所以在实际情况中,更常用的是"二等角"来代替"等角"(点击刚才的在线演示中的dimetric按钮,观察front视图中立方体的顶部)

可以看出,“二等角投影”形成的菱形要比“等角投影”更扁一些,但这种图形的宽/高比例正好是2,处理起来很方便,也好记忆。

有了上面这些基础,就可以来做些正经事儿了,思考一个问题:在常规3D空间中的图形,经过二等角投影(为方便起见,以下把二等角投影也通称为等角投影)后,要经过怎样的计算(或转换),才能得到最终的图形呢?

有鉴于任何几何图形,总是由若干个点连接而成的,我们先来定义一个常规的Point3D类:

+ ?


1

2

3

4

5

6

7

8

9

10

11

12

package {

    public class Point3D {

        public var x:Number;

        public var y:Number;

        public var z:Number;

        public function Point3D(x:Number=0,y:Number=0,z:Number=0) {

            this.x=x;

            this.y=y;

            this.z=z;

        }

    }

}

所以上面的问题也可以简化为:等角空间中3D坐标点,如何转换为电脑屏幕上的2D坐标点?(或者反过来转换?)

转化公式: x1 = x - z y1 = y * 1.2247 + (x + z) * 0.5 z2 = (x + z) * 0.866 - y * 0.707 --用于层深排序,可以先不管

上面的公式可以把等角空间中的坐标点,转化为屏幕空间上的坐标点。(好奇心强烈的童鞋们,自己去看原书上的推导过程吧,我建议大家把这它当成定理公式记住就好,毕竟我们不是在研究数学)

为了方便以后重用,可以把这个公式封装到类IsoUtil.as里

+ ?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

package {

    import flash.geom.Point;

    public class IsoUtils {

        //public static const Y_CORRECT:Number=Math.cos(- Math.PI/6)*Math.SQRT2;       

        public static const Y_CORRECT:Number = 1.2247448713915892;

        //把等角空间中的一个3D坐标点转换成屏幕上的2D坐标点

        public static function isoToScreen(pos:Point3D):Point {

            var screenX:Number=pos.x-pos.z;

            var screenY:Number=pos.y*Y_CORRECT+(pos.x+pos.z)*0.5;

            return new Point(screenX,screenY);

        }

        //把屏幕上的2D坐标点转换成等角空间中的一个3D坐标点

        public static function screenToIso(point:Point):Point3D {

            var xpos:Number=point.y+point.x*.5;

            var ypos:Number=0;

            var zpos:Number=point.y-point.x*.5;

            return new Point3D(xpos,ypos,zpos);

        }

    }

}

用代码来画一个等角图形,测试上面的代码是否正确

+ ?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

package {

    

    import flash.display.Sprite;

    import flash.display.StageAlign;

    import flash.display.StageScaleMode;

    import flash.geom.Point;

    

    [SWF(backgroundColor=0xefefef,height="200",width="300")]

    public class IsoTransformTest extends Sprite {

        public function IsoTransformTest() {

            stage.align=StageAlign.TOP_LEFT;

            stage.scaleMode=StageScaleMode.NO_SCALE;

            

            var p0:Point3D=new Point3D(0,0,0);

            var p1:Point3D=new Point3D(100,0,0);

            var p2:Point3D=new Point3D(100,0,100);

            var p3:Point3D=new Point3D(0,0,100);

            

            var sp0:Point=IsoUtils.isoToScreen(p0);

            var sp1:Point=IsoUtils.isoToScreen(p1);

            var sp2:Point=IsoUtils.isoToScreen(p2);

            var sp3:Point=IsoUtils.isoToScreen(p3);

            

            var tile:Sprite = new Sprite();

            tile.x=150;

            tile.y=50;

            addChild(tile);

            

            tile.graphics.lineStyle(0);

            tile.graphics.moveTo(sp0.x, sp0.y);

            tile.graphics.lineTo(sp1.x, sp1.y);

            tile.graphics.lineTo(sp2.x, sp2.y);

            tile.graphics.lineTo(sp3.x, sp3.y);

            tile.graphics.lineTo(sp0.x, sp0.y);

            

            trace(Math.cos(- Math.PI/6)*Math.SQRT2);//1.2247448713915892           

            trace(tile.width,tile.height);//200 100 符合上面提到的2:1

        }

    }

}

时间: 2024-10-12 18:46:59

等角投影及计算公式的相关文章

公式财务人员常用的计算公式—下篇,怀才当遇整理

5.现金流量分析 现金流量表的主要作用是:第一,提供本企业现金流量的实际情况:第二,有助于评价本期收益质量,第三,有助于评价企业的财务弹性,第四,有助于评价企业的流动性:第五,用于预测企业未来的现金流量. 流动性分析 流动性分析是将资产迅速转变为现金的能力. (1)现金到期债务比 公式:现金到期债务比=经营活动现金净流量 / 本期到期的债务 本期到期债务=一年内到期的长期负债+应付票据 意义:以经营活动的现金净流量与本期到期的债务比较,可以体现企业的偿还到期债务的能力. 分析提示:企业能够用来偿

I2C 上拉电阻选择计算公式

I2C接口上拉电阻的选择 - I2C接口上拉电阻的选择 1.I2C接口的输出端是漏极开路或集电极开路,所以必须在接口外接上拉. 2.上拉电阻的范围很宽,但也需要跟据功耗.信号上升时间等具体确定. 和速度应该没关系.主要是I2C是oc,所以需要.和驱动的从机个数(虽然从机个数不是由电阻决定的)有一定关系 不能说和速度没关系, 从机数量多的话, 由于经常在CMOS 集成电路里面源和基底是相连的, 而漏和基底存在寄生电容, 所以源和漏之间是有寄生电容的, 过大的上拉电阻会引起延时,导致边缘的上升下降速

转载--协方差的意义和计算公式

协方差的意义和计算公式 学过概率统计的孩子都知道,统计里最基本的概念就是样本的均值,方差,或者再加个标准差.首先我们给你一个含有n个样本的集合,依次给出这些概念的公式描述,这些高中学过数学的孩子都应该知道吧,一带而过. 很显然,均值描述的是样本集合的中间点,它告诉我们的信息是很有限的,而标准差给我们描述的则是样本集合的各个样本点到均值的距离之平均.以这两个集合为例,[0,8,12,20]和[8,9,11,12],两个集合的均值都是10,但显然两个集合差别是很大的,计算两者的标准差,前者是8.3,

[转载]页表项(PTE)地址计算公式的解释

转自: http://www.pediy.com/kssd/pediy10/62497.html 在<JIURL玩玩Win2k内存篇 分页机制 (三)>中提到计算虚拟地址对应PTE地址的公式,如下: 代码: PTE_Addr = (VirtualAddr >> 12) * 4 + 0xC0000000 从虚拟地址转换到物理地址的过程来看,计算PTE需要虚拟地址的高10位做页目录索引,还需要第12 - 21位做页表索引,上面的公式晃眼看起来,貌似是错的,但是偏偏它又是对的,为什么捏?

协方差的意义和计算公式

协方差的意义和计算公式 学过概率统计的孩子都知道,统计里最基本的概念就是样本的均值,方差,或者再加个标准差.首先我们给你一个含有n个样本的集合,依次给出这些概念的公式描述,这些高中学过数学的孩子都应该知道吧,一带而过. 很显然,均值描述的是样本集合的中间点,它告诉我们的信息是很有限的,而标准差给我们描述的则是样本集合的各个样本点到均值的距离之平均.以这两个集合为例,[0,8,12,20]和[8,9,11,12],两个集合的均值都是10,但显然两个集合差别是很大的,计算两者的标准差,前者是8.3,

性能测试计算公式【记录备忘】

原文链接:http://my.oschina.net/hyp3/blog/129971 记录备忘!!! 术语及缩写词 l        测试时间:一轮测试从开始到结束所使用的时间 l        并发线程数:测试时同时访问被测系统的线程数.注意,由于测试过程中,每个线程都是以尽可能快的速度发请求,与实际用户的使用有极大差别,所以,此数据不等同于实际使用时的并发用户数. l        每次时间间隔:测试线程发出一个请求,并得到被测系统的响应后,间隔多少时间发出下一次请求. l        

oracle db中,某一种数据字典pct miss的计算公式

本文为原创文章,转载请注明出处: http://blog.csdn.net/msdnchina/article/details/38766801 本文提到的数据字典,以dc_histogram_defs为例子来说明dc_histogram_defs的计算公式. dc_histogram_defs这个依据字面的猜测,应该是直方图的definitions 下图中使用的db,是oracle 10.2.0.4

Oracle数据库中平均事务响应时间的计算公式

注: 该计算公式取自:白鳝 <<oracle 优化日记>>,p316页 Top 5 Timed Events Event Waits Time(s) Avg Wait(ms) % Total Call Time Wait Class direct path read 327,284 15,555 48 86.4 User I/O CPU time   1,093   6.1   db file sequential read 283,101 509 2 2.8 User I/O d

“AS3.0高级动画编程”学习:第三章等角投影(上)

什么是等角投影(isometric)? 原作者:菩提树下的杨过出处:http://yjmyzz.cnblogs.com 刚接触这个概念时,我也很茫然,百度+google了N天后,找到了一些文章: [转载]等角(斜45度)游戏与数学  ( 原文链接:http://www.javaeye.com/articles/1225) [转载]使用illustrator和正交投影原理以及基本三视图制图   (http://www.vanqy.cn/index.php/2009/03/working-with-