118 lines
3.4 KiB
C#
118 lines
3.4 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace VisionCommon {
|
|
/// <summary>
|
|
/// 원점, 각도, 길이로 구성되는 십자가
|
|
/// </summary>
|
|
public class Cross : ICloneable {
|
|
private const int DEFAULT_LENGTH = 50;
|
|
|
|
/// <summary>원점</summary>
|
|
public ImagePoint Origin { get; set; }
|
|
|
|
/// <summary>각도</summary>
|
|
public Angle Angle { get; set; }
|
|
|
|
/// <summary>수직/수평 길이</summary>
|
|
public double Length { get; set; }
|
|
|
|
/// <summary>수직 라인</summary>
|
|
public Line<ImagePoint> VerticalLine {
|
|
get {
|
|
var offset = new ImagePoint(Length, 0);
|
|
var p1 = Origin - offset;
|
|
var p2 = Origin + offset;
|
|
|
|
return new Line<ImagePoint>(
|
|
MathUtil.Rotate(p1, Angle, Origin) as ImagePoint,
|
|
MathUtil.Rotate(p2, Angle, Origin) as ImagePoint);
|
|
}
|
|
}
|
|
|
|
/// <summary>수평 라인</summary>
|
|
public Line<ImagePoint> HorizontalLine {
|
|
get {
|
|
var offset = new ImagePoint(0, Length);
|
|
var p1 = Origin - offset;
|
|
var p2 = Origin + offset;
|
|
|
|
return new Line<ImagePoint>(
|
|
MathUtil.Rotate(p1, Angle, Origin) as ImagePoint,
|
|
MathUtil.Rotate(p2, Angle, Origin) as ImagePoint);
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 생성자
|
|
/// </summary>
|
|
/// <param name="origin">원점</param>
|
|
public Cross(ImagePoint origin)
|
|
: this(origin, new Angle(), DEFAULT_LENGTH) {
|
|
}
|
|
|
|
/// <summary>
|
|
/// 생성자
|
|
/// </summary>
|
|
/// <param name="origin">원점</param>
|
|
/// <param name="length">수직/수평 길이</param>
|
|
public Cross(ImagePoint origin, double length)
|
|
: this(origin, new Angle(), length) {
|
|
}
|
|
|
|
/// <summary>
|
|
/// 생성자
|
|
/// </summary>
|
|
/// <param name="origin">원점</param>
|
|
/// <param name="angle">각도</param>
|
|
public Cross(ImagePoint origin, Angle angle)
|
|
: this(origin, angle, DEFAULT_LENGTH) {
|
|
}
|
|
|
|
/// <summary>
|
|
/// 생성자
|
|
/// </summary>
|
|
/// <param name="origin">원점</param>
|
|
/// <param name="angle">각도</param>
|
|
/// <param name="length">수직/수평 길이</param>
|
|
public Cross(ImagePoint origin, Angle angle, double length) {
|
|
Origin = origin;
|
|
Angle = angle;
|
|
Length = length;
|
|
}
|
|
|
|
public override bool Equals(object obj) {
|
|
return Equals(obj as Cross);
|
|
}
|
|
|
|
public bool Equals(Cross cross) {
|
|
if (cross is null) {
|
|
return false;
|
|
}
|
|
|
|
if (Object.ReferenceEquals(this, cross)) {
|
|
return true;
|
|
}
|
|
|
|
return this.Origin.Equals(cross.Origin)
|
|
&& this.Angle.Equals(cross.Angle)
|
|
&& this.Length == cross.Length;
|
|
}
|
|
|
|
public override int GetHashCode() {
|
|
return Origin.GetHashCode() ^ Angle.GetHashCode() ^ Length.GetHashCode();
|
|
}
|
|
|
|
public object Clone() {
|
|
return new Cross(
|
|
Origin.Clone() as ImagePoint,
|
|
Angle.Clone() as Angle,
|
|
Length);
|
|
}
|
|
}
|
|
}
|