Line.cs
资源名称:QRCodeLib.rar [点击查看]
上传用户:tjjgrl
上传日期:2019-04-04
资源大小:1010k
文件大小:3k
源码类别:
电子政务应用
开发平台:
C#
- using System;
- using QRCodeUtility = ThoughtWorks.QRCode.Codec.Util.QRCodeUtility;
- namespace ThoughtWorks.QRCode.Geom
- {
- public class Line
- {
- internal int x1, y1, x2, y2;
- virtual public bool Horizontal
- {
- get
- {
- if (y1 == y2)
- return true;
- else
- return false;
- }
- }
- virtual public bool Vertical
- {
- get
- {
- if (x1 == x2)
- return true;
- else
- return false;
- }
- }
- virtual public Point Center
- {
- get
- {
- int x = (x1 + x2) / 2;
- int y = (y1 + y2) / 2;
- return new Point(x, y);
- }
- }
- virtual public int Length
- {
- get
- {
- int x = System.Math.Abs(x2 - x1);
- int y = System.Math.Abs(y2 - y1);
- int r = QRCodeUtility.sqrt(x * x + y * y);
- return r;
- }
- }
- public Line()
- {
- x1 = y1 = x2 = y2 = 0;
- }
- public Line(int x1, int y1, int x2, int y2)
- {
- this.x1 = x1;
- this.y1 = y1;
- this.x2 = x2;
- this.y2 = y2;
- }
- public Line(Point p1, Point p2)
- {
- x1 = p1.X;
- y1 = p1.Y;
- x2 = p2.X;
- y2 = p2.Y;
- }
- public virtual Point getP1()
- {
- return new Point(x1, y1);
- }
- public virtual Point getP2()
- {
- return new Point(x2, y2);
- }
- public virtual void setLine(int x1, int y1, int x2, int y2)
- {
- this.x1 = x1;
- this.y1 = y1;
- this.x2 = x2;
- this.y2 = y2;
- }
- public virtual void setP1(Point p1)
- {
- x1 = p1.X;
- y1 = p1.Y;
- }
- public virtual void setP1(int x1, int y1)
- {
- this.x1 = x1;
- this.y1 = y1;
- }
- public virtual void setP2(Point p2)
- {
- x2 = p2.X;
- y2 = p2.Y;
- }
- public virtual void setP2(int x2, int y2)
- {
- this.x2 = x2;
- this.y2 = y2;
- }
- public virtual void translate(int dx, int dy)
- {
- this.x1 += dx;
- this.y1 += dy;
- this.x2 += dx;
- this.y2 += dy;
- }
- //check if two lines are neighboring. allow only 1 dot difference
- public static bool isNeighbor(Line line1, Line line2)
- {
- if ((System.Math.Abs(line1.getP1().X - line2.getP1().X) < 2 && System.Math.Abs(line1.getP1().Y - line2.getP1().Y) < 2) && (System.Math.Abs(line1.getP2().X - line2.getP2().X) < 2 && System.Math.Abs(line1.getP2().Y - line2.getP2().Y) < 2))
- return true;
- else
- return false;
- }
- public static bool isCross(Line line1, Line line2)
- {
- if (line1.Horizontal && line2.Vertical)
- {
- if (line1.getP1().Y > line2.getP1().Y && line1.getP1().Y < line2.getP2().Y && line2.getP1().X > line1.getP1().X && line2.getP1().X < line1.getP2().X)
- return true;
- }
- else if (line1.Vertical && line2.Horizontal)
- {
- if (line1.getP1().X > line2.getP1().X && line1.getP1().X < line2.getP2().X && line2.getP1().Y > line1.getP1().Y && line2.getP1().Y < line1.getP2().Y)
- return true;
- }
- return false;
- }
- public static Line getLongest(Line[] lines)
- {
- Line longestLine = new Line();
- for (int i = 0; i < lines.Length; i++)
- {
- if (lines[i].Length > longestLine.Length)
- {
- longestLine = lines[i];
- }
- }
- return longestLine;
- }
- public override String ToString()
- {
- return "(" + System.Convert.ToString(x1) + "," + System.Convert.ToString(y1) + ")-(" + System.Convert.ToString(x2) + "," + System.Convert.ToString(y2) + ")";
- }
- }
- }