Line.cs
上传用户:tjjgrl
上传日期:2019-04-04
资源大小:1010k
文件大小:3k
源码类别:

电子政务应用

开发平台:

C#

  1. using System;
  2. using QRCodeUtility = ThoughtWorks.QRCode.Codec.Util.QRCodeUtility;
  3. namespace ThoughtWorks.QRCode.Geom
  4. {
  5. public class Line
  6. {
  7.         internal int x1, y1, x2, y2;
  8. virtual public bool Horizontal
  9. {
  10. get
  11. {
  12. if (y1 == y2)
  13. return true;
  14. else
  15. return false;
  16. }
  17. }
  18. virtual public bool Vertical
  19. {
  20. get
  21. {
  22. if (x1 == x2)
  23. return true;
  24. else
  25. return false;
  26. }
  27. }
  28. virtual public Point Center
  29. {
  30. get
  31. {
  32. int x = (x1 + x2) / 2;
  33. int y = (y1 + y2) / 2;
  34. return new Point(x, y);
  35. }
  36. }
  37. virtual public int Length
  38. {
  39. get
  40. {
  41. int x = System.Math.Abs(x2 - x1);
  42. int y = System.Math.Abs(y2 - y1);
  43. int r = QRCodeUtility.sqrt(x * x + y * y);
  44. return r;
  45. }
  46. }
  47. public Line()
  48. {
  49. x1 = y1 = x2 = y2 = 0;
  50. }
  51. public Line(int x1, int y1, int x2, int y2)
  52. {
  53. this.x1 = x1;
  54. this.y1 = y1;
  55. this.x2 = x2;
  56. this.y2 = y2;
  57. }
  58. public Line(Point p1, Point p2)
  59. {
  60. x1 = p1.X;
  61. y1 = p1.Y;
  62. x2 = p2.X;
  63. y2 = p2.Y;
  64. }
  65. public virtual Point getP1()
  66. {
  67. return new Point(x1, y1);
  68. }
  69. public virtual Point getP2()
  70. {
  71. return new Point(x2, y2);
  72. }
  73. public virtual void  setLine(int x1, int y1, int x2, int y2)
  74. {
  75. this.x1 = x1;
  76. this.y1 = y1;
  77. this.x2 = x2;
  78. this.y2 = y2;
  79. }
  80. public virtual void  setP1(Point p1)
  81. {
  82. x1 = p1.X;
  83. y1 = p1.Y;
  84. }
  85. public virtual void  setP1(int x1, int y1)
  86. {
  87. this.x1 = x1;
  88. this.y1 = y1;
  89. }
  90. public virtual void  setP2(Point p2)
  91. {
  92. x2 = p2.X;
  93. y2 = p2.Y;
  94. }
  95. public virtual void  setP2(int x2, int y2)
  96. {
  97. this.x2 = x2;
  98. this.y2 = y2;
  99. }
  100. public virtual void  translate(int dx, int dy)
  101. {
  102. this.x1 += dx;
  103. this.y1 += dy;
  104. this.x2 += dx;
  105. this.y2 += dy;
  106. }
  107. //check if two lines are neighboring. allow only 1 dot difference 
  108. public static bool isNeighbor(Line line1, Line line2)
  109. {
  110. 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))
  111. return true;
  112. else
  113. return false;
  114. }
  115. public static bool isCross(Line line1, Line line2)
  116. {
  117. if (line1.Horizontal && line2.Vertical)
  118. {
  119. 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)
  120. return true;
  121. }
  122. else if (line1.Vertical && line2.Horizontal)
  123. {
  124. 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)
  125. return true;
  126. }
  127. return false;
  128. }
  129. public static Line getLongest(Line[] lines)
  130. {
  131. Line longestLine = new Line();
  132. for (int i = 0; i < lines.Length; i++)
  133. {
  134. if (lines[i].Length > longestLine.Length)
  135. {
  136. longestLine = lines[i];
  137. }
  138. }
  139. return longestLine;
  140. }
  141. public override String ToString()
  142. {
  143. return "(" + System.Convert.ToString(x1) + "," + System.Convert.ToString(y1) + ")-(" + System.Convert.ToString(x2) + "," + System.Convert.ToString(y2) + ")";
  144. }
  145. }
  146. }