/// <summary> /// 辺が同じものか? /// Noは比較しない. 辺の長さと、開始位置リストをチェックする /// </summary> /// <param name="tagt"></param> /// <returns></returns> public bool EqualEdge(Edge_Ver_1_2 tagt) { bool equals = false; if (!this.Delta.Equals(tagt.Delta)) { return equals; } for (int ino = 0; ino < this.Points.Length; ino++) { if (Points[ino].X != tagt.Points[ino].X) { return equals; } if (Points[ino].Y != tagt.Points[ino].Y) { return equals; } } equals = true; return equals; }
/// <summary> /// 単純にPoints[0]とPoints[1]を入れ替える /// Points[0]に始点、Points[1]に終点座標を入れた場合、こちらを使用。 /// (このインスタンス自身は変更しない) /// </summary> /// <returns></returns> public Edge_Ver_1_2 GetSimpleSwap() { Edge_Ver_1_2 e = new Edge_Ver_1_2(); e.No = this.No; e.Delta = new Size(-this.Delta.Width, -this.Delta.Height); Point p1 = this.Points[0]; // 辺の始点を格納しているものとする Point p2 = this.Points[1]; // 辺の終点を格納しているものとする e.Points[0] = p2; e.Points[1] = p1; return e; }
/// <summary> /// 包含関係にあるか? /// </summary> /// <param name="tagt"></param> /// <returns></returns> public bool Contains(Edge_Ver_1_2 tagt, out Point minPt, out Point maxPt) { bool contains = false; minPt = new Point(); maxPt = new Point(); if (this.Delta.Equals(tagt.Delta)) { if (this.Delta.Equals(new Size(1, 0)) && this.Points[0].Y == tagt.Points[0].Y) { int minX; int maxX; if (tagt.Points[1].X <= this.Points[0].X) { // this +-------------+ // tagt +-------------+ // // this +-------------+ // tagt +-------------+ } else if (tagt.Points[0].X >= this.Points[1].X) { // this +-------------+ // tagt +-------------+ // // this +-------------+ // tagt +-------------+ } else { contains = true; if (this.Points[0].X >= tagt.Points[0].X) { minX = this.Points[0].X; } else { minX = tagt.Points[0].X; } if (this.Points[1].X <= tagt.Points[1].X) { maxX = this.Points[1].X; } else { maxX = tagt.Points[1].X; } minPt = new Point(minX, this.Points[0].Y); maxPt = new Point(maxX, this.Points[0].Y); } } else if (this.Delta.Equals(new Size(0, 1)) && this.Points[0].X == tagt.Points[0].X) { int minY; int maxY; if (tagt.Points[1].Y <= this.Points[0].Y) { // this +-------------+ // tagt +-------------+ // // this +-------------+ // tagt +-------------+ } else if (tagt.Points[0].Y >= this.Points[1].Y) { // this +-------------+ // tagt +-------------+ // // this +-------------+ // tagt +-------------+ } else { contains = true; if (this.Points[0].Y >= tagt.Points[0].Y) { minY = this.Points[0].Y; } else { minY = tagt.Points[0].Y; } if (this.Points[1].Y <= tagt.Points[1].Y) { maxY = this.Points[1].Y; } else { maxY = tagt.Points[1].Y; } minPt = new Point(this.Points[0].X, minY); maxPt = new Point(this.Points[0].X, maxY); } } } return contains; }