/// <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); }
void linkPoint(zz2DPoint from, zz2DPoint to) { zz2DLine lLine = new zz2DLine(from, to); }
internal void setPreviousLine(zz2DLine value) { mPreviousLine = value; if (mNextLine != null) convexAngle = isConvexPoint(previousPoint.position,position,nextPoint.position); }
internal void addDiagonal(zz2DLine pDiagonal) { mDiagonals.Add(pDiagonal); }
/// <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; } } }
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; }