帮酷LOGO
  • 显示原文与译文双语对照的内容
文章标签:Polygon  Convex  dec  Polygons  
Library for decomposing 2D polygons into convex regions.

  • 源代码名称:poly-decomp.js
  • 源代码网址:http://www.github.com/schteppe/poly-decomp.js
  • poly-decomp.js源代码文档
  • poly-decomp.js源代码下载
  • Git URL:
    git://www.github.com/schteppe/poly-decomp.js.git
  • Git Clone代码到本地:
    git clone http://www.github.com/schteppe/poly-decomp.js
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/schteppe/poly-decomp.js
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
  • poly-decomp.js

    将 2D 个多边形分解成凸区域的库。

    启动演示

    Decomposing a convcave polygon into convex regions

    安装

    浏览器

    下载 decomp.js 或者 decomp.min.js 插件,并将脚本包含在你的HTML中:

    <scriptsrc="decomp.js"type="text/javascript"></script><!-- or: --><scriptsrc="decomp.min.js"type="text/javascript"></script>

    然后你可以使用 decomp 全局。

    node.js
    npm install poly-decomp

    然后要求它这样:

    var decomp =require('poly-decomp');

    基本用法

    // Create a concave polygonvar concavePolygon = [
     [ -1, 1],
     [ -1, 0],
     [ 1, 0],
     [ 1, 1],
     [0.5, 0.5]
    ];// Decompose into convex polygons, using the faster algorithmvar convexPolygons =decomp.quickDecomp(concavePolygon);// ==> [ [[1,0],[1,1],[0.5,0.5]], [[0.5,0.5],[-1,1],[-1,0],[1,0]] ]// Decompose using the slow (but optimal) algorithmvar convexPolygons =decomp.decomp(concavePolygon);// ==> [ [[-1,1],[-1,0],[1,0],[0.5,0.5]], [[1,0],[1,1],[0.5,0.5]] ]

    高级用法

    // Get user input as an array of points.var polygon =getUserInput();// Check if the polygon self-intersectsif(decomp.isSimple(polygon)){
     // Reverse the polygon to make sure it uses counter-clockwise windingdecomp.makeCCW(polygon);
     // Decompose into convex piecesvar convexPolygons =decomp.quickDecomp(polygon);
     // Draw each point on an HTML5 Canvas contextfor(var i=0; i<convexPolygons.length; i++){
     var convexPolygon = convexPolygons[i];
     ctx.beginPath();
     var firstPoint = convexPolygon[0];
     ctx.moveTo(firstPoint[0], firstPoint[1]);
     for(var j=1; j<convexPolygon.length; j++){
     var point = convexPolygon[j];
     var x = point[0];
     var y = point[1];
     c.lineTo(x, y);
     }
     ctx.closePath();
     ctx.fill();
     }
    }

    文档

    quickDecomp ( 多边形:array <点> ): array <array <点>>
    var convexPolygons =decomp.quickDecomp(polygon);

    用快速算法将多边形分割成凸子多边形。 请注意,结果 array 中将使用输入点对象。

    腐烂( 多边形:array <点> ): array <array <点>>
    var convexPolygons =decomp.quickDecomp(polygon);

    利用优化算法将多边形分解成一个或者多个凸子。 请注意,结果 array 中将使用输入点对象。

    isSimple ( 多边形:array <点> ): 布尔型
    if(decomp.isSimple(polygon)){
     // Polygon does not self-intersect - it's safe to decompose.var convexPolygons =decomp.quickDecomp(polygon);
    }

    如果多边形中的任意线段相交,则返回 true 。 使用这里选项可以检查输入多边形是否可以分解。

    makeCCW ( 多边形:array <点> ): 空心
    console.log('Polygon with clockwise winding:', polygon);decomp.makeCCW(polygon);console.log('Polygon with counter-clockwise winding:', polygon);

    如果多边形的顶点不是顺时针排列,则反转多边形。 请注意,输入多边形 array 将在适当位置被修改。

    removeCollinearPoints ( 多边形:array <point>,thresholdAngle: 数字)
    var before =polygon.length;decomp.removeCollinearPoints(polygon, 0.1);var numRemoved = before -polygon.length;console.log(numRemoved +' collinear points could be removed');

    删除多边形中的共线。 这意味着如果三个点沿着同一条直线放置,中间的将被删除。 thresholdAngle 以弧度度量,并确定这些点是否共线或者不共线。 请注意,输入 array 将在适当位置被修改。

    更改日志

    0.2.1
    • 修正 Bug 在共线点去除,修正后的算法更主动,更正确。
    0.2.0
    • 基于类的API将类重写为基于最小数组。 查看文档。
    0.1
    • 添加的方法 Polygon.prototype.removeCollinearPoints
    • 添加可选参数 thresholdAnglePoint.collinear(a,b,c,thresholdAngle)

    请确保你有 git,node.js,NPM和 grunt安装。

    git clone https://github.com/schteppe/poly-decomp.js.git; # Clone the repo
    cd poly-decomp.js;
    npm install; # Install dependencies
     # (make changes to source)
    grunt; # Builds build/decomp.js

    最近的提交被推送到 master 分支。 感谢你提供帮助 !

    库是 C++ 库 poly的手动端口,由标记 Bayazit Decomp 。

    实现了两种算法:一个最优的( 但慢速) 和一。



    文章标签:dec  Polygon  Convex  Polygons  

    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语