コード例 #1
0
ファイル: zzPolygon.cs プロジェクト: Seraphli/TheInsectersWar
    /// <summary>
    /// 顺时针围起来的是正
    /// </summary>
    /// <param name="points"></param>
    public void addShape(Vector2[] points)
    {
        if (points.Length < 3)
            return;
        zz2DPoint lFirstPoint = new zz2DPoint(points[0]);
        mPoints.Add(lFirstPoint);
        zz2DPoint lPrePoint = addPoint(points[1],lFirstPoint);
        for(int i=2;i<points.Length;++i)
        {
            zz2DPoint lNewPoint =  addPoint(points[i], lPrePoint);

            //若新的点在之前的线右边,则之前的角为凸角;
                //zz2DPoint.LeftOrRight(
                //lPrePoint.previousPoint.position,
                //lPrePoint.position,
                //lNewPoint.position) < 0;//lPrePoint's next point is lNewPoint

            lPrePoint = lNewPoint;
        }
        zz2DPoint lLastPoint = lPrePoint;

        zz2DLine lLastLine = new zz2DLine(lPrePoint, lFirstPoint);
        mLines.Add(lLastLine);

        //lLastPoint.convexAngle = zz2DPoint.LeftOrRight(
        //    lLastPoint.previousPoint.position,
        //    lLastPoint.position,
        //    lLastPoint.nextPoint.position) < 0;

        //lFirstPoint.convexAngle = zz2DPoint.LeftOrRight(
        //    lFirstPoint.previousPoint.position,
        //    lFirstPoint.position,
        //    lFirstPoint.nextPoint.position) < 0;

        //sortPoint(mPoints);
    }
コード例 #2
0
 void linkPoint(zz2DPoint from, zz2DPoint to)
 {
     zz2DLine lLine = new zz2DLine(from, to);
 }
コード例 #3
0
ファイル: zz2DPoint.cs プロジェクト: Seraphli/TheInsectersWar
 internal void setPreviousLine(zz2DLine value)
 {
     mPreviousLine = value;
     if (mNextLine != null)
         convexAngle = isConvexPoint(previousPoint.position,position,nextPoint.position);
 }
コード例 #4
0
ファイル: zz2DPoint.cs プロジェクト: Seraphli/TheInsectersWar
 internal void addDiagonal(zz2DLine pDiagonal)
 {
     mDiagonals.Add(pDiagonal);
 }
コード例 #5
0
ファイル: zz2DPoint.cs プロジェクト: Seraphli/TheInsectersWar
 /// <summary>
 /// 得到点的左右边,分割靠Y轴
 /// </summary>
 /// <param name="side1"></param>
 /// <param name="side2"></param>
 /// <returns>小于0 则边都在点左侧,大于0 则都在点右侧,等于0,则两边分部 或者有个在垂直方向上</returns>
 public int getLeftRightSideInX( out zz2DLine side1, out zz2DLine side2)
 {
     side1 = previousLine;
     side2 = nextLine;
     float x = position.x;
     if (previousPoint.position.x < x)
     {
         if (nextPoint.position.x < x)
             return -1;
         else
         {
             //side1 = PreviousLine;
             //side2 = nextLine;
             return 0;
         }
     }
     else
     {
         if (nextPoint.position.x > x)
             return 1;
         else
         {
             side2 = previousLine;
             side1 = nextLine;
             return 0;
         }
     }
 }
コード例 #6
0
ファイル: zzPolygon.cs プロジェクト: Seraphli/TheInsectersWar
 private zz2DPoint addPoint(zzPainterPoint pointPos, zz2DPoint lPrePoint)
 {
     zz2DPoint lPoint = new zz2DPoint(pointPos);
     mPoints.Add(lPoint);
     zz2DLine lLine = new zz2DLine(lPrePoint, lPoint);
     mLines.Add(lLine);
     lPrePoint = lPoint;
     return lPoint;
 }