Skip to content

Commit 9d9364f

Browse files
authored
Merge pull request #19 from dotnet-campus/t/lindexi/Angle
加上角度的计算方法
2 parents b0c4829 + 06ba5ce commit 9d9364f

2 files changed

Lines changed: 155 additions & 0 deletions

File tree

  • src/dotnetCampus.OpenXMLUnitConverter
  • tests/dotnetCampus.OpenXmlUnitConverter.Tests

src/dotnetCampus.OpenXMLUnitConverter/Angle.cs

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,5 +101,107 @@ public override int GetHashCode()
101101
{
102102
return Degree.GetHashCode();
103103
}
104+
105+
/// <summary>
106+
/// 表示正数的角度
107+
/// </summary>
108+
/// <param name="a"></param>
109+
/// <returns></returns>
110+
public static Angle operator +(Angle a) => a;
111+
112+
/// <summary>
113+
/// 表示负数的角度
114+
/// </summary>
115+
/// <param name="a"></param>
116+
/// <returns></returns>
117+
public static Angle operator -(Angle a) => Angle.FromDegreeValue(-a.Degree);
118+
119+
/// <summary>
120+
/// 两个角度的相加
121+
/// </summary>
122+
/// <param name="a"></param>
123+
/// <param name="b"></param>
124+
/// <returns></returns>
125+
public static Angle operator +(Angle a, Angle b)
126+
=> Angle.FromDegreeValue(a.Degree + b.Degree);
127+
128+
/// <summary>
129+
/// 两个角度的相减
130+
/// </summary>
131+
/// <param name="a"></param>
132+
/// <param name="b"></param>
133+
/// <returns></returns>
134+
public static Angle operator -(Angle a, Angle b)
135+
=> a + (-b);
136+
137+
/// <summary>
138+
/// 角度乘以倍数
139+
/// </summary>
140+
/// <param name="a"></param>
141+
/// <param name="b"></param>
142+
/// <returns></returns>
143+
public static Angle operator *(Angle a, double b)
144+
=> Angle.FromDegreeValue(a.Degree * b);
145+
146+
/// <summary>
147+
/// 倍数乘以角度,效果和角度乘以倍数相同
148+
/// </summary>
149+
/// <param name="a"></param>
150+
/// <param name="b"></param>
151+
/// <returns></returns>
152+
public static Angle operator *(double a, Angle b) => b * a;
153+
154+
/// <summary>
155+
/// 角度除以倍数
156+
/// </summary>
157+
/// <param name="a"></param>
158+
/// <param name="b"></param>
159+
/// <returns></returns>
160+
public static Angle operator /(Angle a, double b)
161+
{
162+
if (b == 0)
163+
{
164+
throw new DivideByZeroException();
165+
}
166+
167+
return Angle.FromDegreeValue(a.Degree / b);
168+
}
169+
170+
/// <summary>
171+
/// 判断两个角度的大于
172+
/// </summary>
173+
/// <param name="a"></param>
174+
/// <param name="b"></param>
175+
/// <returns></returns>
176+
public static bool operator >(Angle a, Angle b)
177+
=> a.Degree > b.Degree;
178+
179+
/// <summary>
180+
/// 判断两个角度的小于
181+
/// </summary>
182+
/// <param name="a"></param>
183+
/// <param name="b"></param>
184+
/// <returns></returns>
185+
public static bool operator <(Angle a, Angle b)
186+
=> b > a;
187+
188+
/// <summary>
189+
/// 判断两个角度相等
190+
/// </summary>
191+
/// <param name="a"></param>
192+
/// <param name="b"></param>
193+
/// <returns></returns>
194+
public static bool operator ==(Angle a, Angle b) => a.Equals(b);
195+
196+
/// <summary>
197+
/// 判断两个角度不相等
198+
/// </summary>
199+
/// <param name="a"></param>
200+
/// <param name="b"></param>
201+
/// <returns></returns>
202+
public static bool operator !=(Angle a, Angle b) => !a.Equals(b);
203+
204+
/// <inheritdoc />
205+
public override string ToString() => $"{Degree:0.000}°";
104206
}
105207
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
using System;
2+
using DocumentFormat.OpenXml;
3+
using Microsoft.VisualStudio.TestTools.UnitTesting;
4+
using MSTest.Extensions.Contracts;
5+
6+
namespace dotnetCampus.OpenXmlUnitConverter.Tests
7+
{
8+
[TestClass]
9+
public class AngleTest
10+
{
11+
[ContractTestCase]
12+
public void Calculate()
13+
{
14+
"传入两个相等的角度值,可以通过 == 判断相等".Test(() =>
15+
{
16+
var a = Angle.Degree90;
17+
var b = new Angle(new Int32Value(5400000));
18+
var c = Angle.FromRadiansValue(Math.PI / 2);
19+
20+
Assert.AreEqual(true, a == b);
21+
Assert.AreEqual(true, a == c);
22+
Assert.AreEqual(true, b == c);
23+
24+
Assert.AreEqual(false, a != b);
25+
Assert.AreEqual(false, a != c);
26+
Assert.AreEqual(false, b != c);
27+
});
28+
29+
"传入90度的角度和270度的角度,可以返回270度的角度更大".Test(() =>
30+
{
31+
var a = Angle.Degree90;
32+
var b = Angle.Degree270;
33+
34+
Assert.AreEqual(true, b > a);
35+
Assert.AreEqual(true, a < b);
36+
});
37+
38+
"使用负数表示的角度,拿到的是原先的负数角度值".Test(() =>
39+
{
40+
var a = Angle.Degree180;
41+
var b = -a;
42+
Assert.AreEqual(a, b * -1);
43+
Assert.AreEqual(a, -b);
44+
});
45+
46+
"使用正数表示的角度,和原先角度值相同".Test(() =>
47+
{
48+
var angle = Angle.Degree180;
49+
Assert.AreEqual(angle, +angle);
50+
});
51+
}
52+
}
53+
}

0 commit comments

Comments
 (0)