zoukankan      html  css  js  c++  java
  • Rectangle类详解

    一,概括:

    乍一看,可能感觉是一个矩形类,矩形类就是画一个长方形吗??这是我一开始见到这个类的感觉。

    其实不是的Rectangle是一个“区域”类,它的最大作用就是定义一个矩形的区域,如果问为什么是矩形,不是圆形,三角形···Anyway···因为从程序的角度来说,矩形是最适合表示的。

    Rectangle类其实之前在介绍Bitmapdata的时候大家也不陌生了,很多Bitmapdata变化区域的界定就是靠的他。这次详细的讲解主要是对他的一些运算API做一个了解。

    Rectangle类属于geom包,geom是geometry(几何)的缩写,同属这个包的还有Point类,这个包里放的也都是一些数学运算的概念类。Rectangle直接继承Object对象,所以没有太多父类东西要了解。一共有11个公共属性,16个公共方法。看似很多,其实很多都很容易理解。

    二,公共属性:

    分两部分来,一部分是直接可得的,一部分是可以运算但是AS3已经内部计算好可以直接调用的。

    第一部分:

    1,x:就是区域的x坐标。(左上角)

    2,y:就是区域的y坐标。(左上角)

    3,width:区域的宽

    4,height:区域的高

    第二部分:

    5,top:区域的顶的y坐标,其实就是y

    6,bottom:区域底的y坐标,其实就是y+height

    7,left:区域左边缘的x坐标,其实就是x

    8,right:区域右边缘的x坐标,其实就是x+width

    9,topLeft:一个point对象,记录了左上角的位置,可以读写(即可以通过给这个属性赋值一个point对象来设置x,y值)

    10,rightBottom:也是一个point对象,记录了右下角位置,可以读写(即可以通过给这个对象赋值,配合topLeft一起修改Rectangle的width,height,bottom,right属性)

    11,size:还是一个point对象,记录了区域的长宽,可以读写(即可以通过赋值,直观的改变区域的长宽,间接改变了面积)。

    虽然有11个公共属性,可是核心的也就x,y,width,height四个,其他的完全可以通过简单的数学运算取代。不过如果能熟练运用其他的7个公共属性也不错。修改起来也更加直观。

    三,公共方法:

    1,构造方法

    Rectangle(x:Number = 0, y:Number = 0, Number = 0, height:Number = 0)

    这个构造方法很好理解,直接设置了核心的4个公共属性。

    2,复制方法

    clone():Rectangle

    这个方法也很简单,就是复杂类型对象的复制。

    3,判断某个点是否在区域内(方法1)

    contains(x:Number, y:Number):Boolean

    很直观,输入点的坐标x,y,返回Boolen值

    4,判断某个点是否在区域内(方法2)

    containsPoint(point:Point):Boolean

    跟contains()完全一样的作用,只不过参数换成了一个point对象。

    5,判断区域A是否包含另外一个区域B

    containsRect(rect:Rectangle):Boolean

    这里的包含,是指完全包住,即成一个“回”字型。

    6,判断两个区域是否相等

    equals(toCompare:Rectangle):Boolean

    这里的相等,不是指是否同一个对象的相等,而是指构成两个区域的4要素:x,y,width,height完全相等。如果完全相等这返回true

    7,改变区域大小(方法1)

    inflate(dx:Number, dy:Number):void

    inflate的意思是膨胀。有人可能好奇,增加大小直接设置width和height不就好了吗?这个方法的不同是,他是以区域的中心点,向左右上下各增长dx,dy的,内部的运算其实是:

    x -= dx;
    width += 2 * dx;

    y -= dy;
    height += 2 * dy;

    PS:dx,dy可以输入负数做参数,这样就达到了缩小区域的目的。

    8,改变区域大小(方法2)

    inflatePoint(point:Point):void

    跟inflate()一样作用,只是参数换成了point而已。

    9,两区域取交集

    intersection(toIntersect:Rectangle):Rectangle

    标题其实已经说出了这个方法的作用,就是取得两个区域的交集,即返回相交部分的区域。

    10,判断两区域是否相交

    intersects(toIntersect:Rectangle):Boolean

    这个函数和intersection()很容易混淆,因为根本就是同一个词的不同词性,一个是名词一个是动词。不过还好看返回值还是能清晰分出的。这个方法就是判断两区域是否相交。

    11,判断区域是否为空

    isEmpty():Boolean

    这里空的意思,可以理解为区域的面积width*height=0,即width==0 || height==0

    12,位移(方法1)

    offset(dx:Number, dy:Number):void

    就是改变左上角的位置,其实就是改变x,y的值。具体作用为:

    Rectangle.x += dx;

    Rectangle.y += dy;

    13,位移(方法2)

    offsetPoint(point:Point):void

    跟offset()作用一样,只是参数换成了point

    14,清零

    setEmpty():void

    描述是将Rectangle所有属性清零,就是4大基本属性x,y,width,height都为0

    15,输出

    toString():String

    没啥特别的,就是一个转String类型时调用的方法。输出4大基本属性x,y,width,height

    16,合并区域

    union(toUnion:Rectangle):Rectangle

    将两个区域合并,听上去好像很不错,但是别高兴太早,这个合并可不像Photoshop里的合并多个选择区域那种合并。这个合并区域是合出一个大矩形···囧···就是返回一个大矩形刚刚好包含了两个矩形。

    总结:

    总的来说Rectangle类并不难掌握。

    其中公共属性就是4大属性x,y,width,height。

    而公共方法主要分作三大功能:

    1,改变4大属性,如inflateinflatePointsetEmpty

    2,判断包含,如containscontainsPointcontainsRectequals

    3,相交,相并操作,如intersectionintersectsunion

    4,还有就是剩下一些杂七杂八的小功能。

    但Rectangle作为运算类,可能没有太多精彩的玩法。但是却是很多算法的基石。例如模拟即时战略的选取功能等等。还有类似BitmapData运算中限制变化的区域以达到优化的目的等等。

  • 相关阅读:
    笨办法06字符串(string)和文本
    react学习之路-配制antd-mobile
    react.js学习之路六
    bug
    react.js学习之路五
    react.js学习之路四
    react.js学习之路三
    react.js学习之路二
    react.js学习之路一
    MVC,MVP 和 MVVM 的区别之处
  • 原文地址:https://www.cnblogs.com/mark5/p/11056747.html
Copyright © 2011-2022 走看看