使用PHP5创建图形的巧妙方法三

萧索奈何

萧索奈何

2016-01-29 13:29

使用PHP5创建图形的巧妙方法三,使用PHP5创建图形的巧妙方法三

创建 viewport

  viewport 是一个人造的坐标系统,可以转换成图像的物理坐标系统。viewport 的扩展可以是您希望的任何东西。例如,x 和 y 轴的起点和终点可以是 -2 和 2,这样 viewport 坐标平面的中心就是 0, 0。这对于三角图形(例如 sin 和 cosine)来说是很好的一个 viewport。或者,这个 viewport 也可以是不对称的,其中 y 值的范围从 -1 到 1,x 值的范围是从 0 到 10,000,这取决于您的需要。

  这个 viewport 的其他值可以确保构建一个 400X400 的图像所采用的逻辑与构建一个 4000X2000 的图像所采用的逻辑是相同的。代码负责向这个 viewport 中写入数据,然后这个 viewport 自动实现到图像的物理尺寸的自动映射。

  要让您的 viewport 正常工作,您需要将这个 viewport 的范围从 0,0 修改为 1,1,这可以让图形对象回调图形环境,从而将 viewport 的坐标转换成物理坐标。您可以将所有的代码都放到 BoxObject 基类中进行简化。

  图 7 显示了有关新添加的代码的两个内容。首先是添加的 tx 和 ty 方法,这会将 x 和 y 坐标从 viewport 转换成物理图像的坐标。第二个是对 BoxObject 增加了 draw 方法,它的派生类应该用来进行制图。BoxObject 在 render 方法中实现 viewport 的转换,并使用物理坐标来调用 draw 方法。使用这种方法,Line、Oval 和 Rectangle 类都可以利用 viewport 坐标,而不需要担心坐标转换的问题。

图 7. 所添加的图形环境 viewport 转换
所添加的图形环境 viewport 转换

  这个新库的代码如清单 7 所示:

  清单 7. 具有 viewport 支持的图形库

 <?php class GraphicsEnvironment {   public $width;   public $height;   public $gdo;   public $colors = array();   public function __construct( $width, $height )   {     $this-width = $width;     $this-height = $height;     $this-gdo = imagecreatetruecolor( $width, $height );     $this-addColor( "white", 255, 255, 255 );     imagefilledrectangle( $this-gdo, 0, 0,       $width, $height,       $this-getColor( "white" ) );   }   public function width() { return $this-width; }   public function height() { return $this-height; }   public function addColor( $name, $r, $g, $b )   {     $this-colors[ $name ] = imagecolorallocate(       $this-gdo,       $r, $g, $b );   }   public function getGraphicObject()   {     return $this-gdo;   }   public function getColor( $name )   {     return $this-colors[ $name ];   }   public function saveAsPng( $filename )   {     imagepng( $this-gdo, $filename );   }      public function tx( $x )   {     return $x * $this-width;   }       public function ty( $y )   {     return $y * $this-height;   } } abstract class GraphicsObject {   abstract public function render( $ge );   abstract public function z(); } function zsort( $a, $b ) {   if ( $a-z() < $b-z() ) return -1;   if ( $a-z()  $b-z() ) return 1;   return 0; } class Group extends GraphicsObject {   private $z;   protected $members = array();   public function __construct( $z )   {     $this-z = $z;   }   public function add( $member )   {     $this-members []= $member;   }   public function render( $ge )   {     usort( $this-members, "zsort" );     foreach( $this-members as $gobj )     {       $gobj-render( $ge );     }   }   public function z() { return $this-z; } } abstract class BoxObject extends GraphicsObject {   protected $color;   protected $sx;   protected $sy;   protected $ex;   protected $ey;   protected $z;   public function __construct( $z, $color, $sx, $sy, $ex, $ey )   {     $this-z = $z;     $this-color = $color;     $this-sx = $sx;     $this-sy = $sy;     $this-ex = $ex;     $this-ey = $ey;   }   public function render( $ge )   {     $rsx = $ge-tx( $this-sx );     $rsy = $ge-ty( $this-sy );     $rex = $ge-tx( $this-ex );     $rey = $ge-&      
展开更多 50%)
分享

猜你喜欢

使用PHP5创建图形的巧妙方法三

PHP
使用PHP5创建图形的巧妙方法三

使用PHP5创建图形巧妙方法(二)

PHP
使用PHP5创建图形巧妙方法(二)

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

使用PHP5创建图形的巧妙方法四

PHP
使用PHP5创建图形的巧妙方法四

使用PHP5创建图形巧法(一)

PHP
使用PHP5创建图形巧法(一)

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

PHP5 安装方法

Web开发
PHP5 安装方法

初探 PHP5

PHP
初探 PHP5

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

《全民精灵》万能图谱碎片获取方式

《全民精灵》万能图谱碎片获取方式

《墨鬼》奖杯一览史上最坑爹

《墨鬼》奖杯一览史上最坑爹
下拉加载更多内容 ↓