1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
using Microsoft.Xna.Framework;
using Xunit;
namespace MonoGame.Extended.Tests.Primitives
{
public class RectangleFTests
{
[Fact]
public void Rectangle_Intersects_Test()
{
var rect1 = new Rectangle(0, 0, 32, 32);
var rect2 = new Rectangle(32, 32, 32, 32);
Assert.False(rect1.Intersects(rect2));
}
[Fact]
public void PassVector2AsConstructorParameter_Test()
{
var rect1 = new RectangleF(new Vector2(0, 0), new Size2(12.34f, 56.78f));
var rect2 = new RectangleF(new Vector2(0, 0), new Vector2(12.34f, 56.78f));
Assert.Equal(rect1, rect2);
}
[Fact]
public void PassPointAsConstructorParameter_Test()
{
var rect1 = new RectangleF(new Vector2(0, 0), new Size2(12, 56));
var rect2 = new RectangleF(new Vector2(0, 0), new Size2(12, 56));
Assert.Equal(rect1, rect2);
}
public class Transform
{
[Fact]
public void Center_point_is_not_translated()
{
var rectangle = new RectangleF(new Point2(0, 0), new Size2(20, 30));
var transform = Matrix2.Identity;
var result = RectangleF.Transform(rectangle, ref transform);
Assert.Equal(new Point2(10, 15), result.Center);
}
[Fact]
public void Center_point_is_translated()
{
var rectangleF = new RectangleF(new Point2(0, 0), new Size2(20, 30));
var transform = Matrix2.CreateTranslation(1, 2);
var result = RectangleF.Transform(rectangleF, ref transform);
Assert.Equal(new Point2(11, 17), result.Center);
}
[Fact]
public void Size_is_not_changed_by_identity_transform()
{
var rectangle = new RectangleF(new Point2(0, 0), new Size2(20, 30));
var transform = Matrix2.Identity;
var result = RectangleF.Transform(rectangle, ref transform);
Assert.Equal(new Size2(20, 30), result.Size);
}
[Fact]
public void Size_is_not_changed_by_translation()
{
var rectangle = new RectangleF(new Point2(0, 0), new Size2(20, 30));
var transform = Matrix2.CreateTranslation(1, 2);
var result = RectangleF.Transform(rectangle, ref transform);
Assert.Equal(new Size2(20, 30), result.Size);
}
[Fact]
public void Applies_rotation_and_translation()
{
/* Rectangle with center point aligned in coordinate system with origin 0.
*
* :
* :
* +-+
* | |
* |p|
* | |
* ...............0-+............
* :
* :
* :
*
* Rotate center point p, 90 degrees around origin 0.
*
* :
* :
* +---+
* | p |
* ...........+---0..............
* :
* :
* :
*
* Then translate rectangle by x=10 and y=20.
* :
* : +---+
* : | p |
* y=21 - - - - - - - -> +---+
* .
* :
* ...............0..............
* :
* :
* :
*/
var rectangle = new RectangleF(new Point2(0, 0), new Size2(2, 4));
var transform =
Matrix2.CreateRotationZ(MathHelper.PiOver2)
*
Matrix2.CreateTranslation(10, 20);
var result = RectangleF.Transform(rectangle, ref transform);
Assert.Equal(-2 + 10, result.Center.X, 6);
Assert.Equal(1 + 20, result.Center.Y, 6);
Assert.Equal(4, result.Size.Width, 6);
Assert.Equal(2, result.Size.Height, 6);
}
}
}
}
|