Jypeli 10
The simple game programming library
BoundingRectangle.cs
Siirry tämän tiedoston dokumentaatioon.
1using System;
2
3namespace Jypeli
4{
8 public struct BoundingRectangle
9 {
13 public double X;
17 public double Y;
21 public double Width;
25 public double Height;
26
30 public double Left { get { return X - Width / 2; } }
34 public double Right { get { return X + Width / 2; } }
38 public double Bottom { get { return Y - Height / 2; } }
42 public double Top { get { return Y + Height / 2; } }
43
48 {
49 get { return new Vector( X, Y ); }
50 set { X = value.X; Y = value.Y; }
51 }
52
53
57 public Vector Size
58 {
59 get { return new Vector( Width, Height ); }
60 set { Width = value.X; Height = value.Y; }
61 }
62
67 {
68 get { return new Vector( X - Width / 2, Y + Height / 2 ); }
69 }
70
75 {
76 get { return new Vector( X + Width / 2, Y - Height / 2 ); }
77 }
78
83 {
84 get { return new Vector(X - Width / 2, Y - Height / 2); }
85 }
86
91 {
92 get { return new Vector(X + Width / 2, Y + Height / 2); }
93 }
94
98 public double DiagonalLength
99 {
100 get { return Math.Sqrt( Width * Width + Height * Height ); }
101 }
102
103
111 public BoundingRectangle(double x, double y, double w, double h)
112 {
113 X = x;
114 Y = y;
115 Width = w;
116 Height = h;
117 }
118
124 public BoundingRectangle( Vector topLeft, Vector bottomRight )
125 {
126 Width = bottomRight.X - topLeft.X;
127 Height = topLeft.Y - bottomRight.Y;
128 X = topLeft.X + Width / 2;
129 Y = bottomRight.Y + Height / 2;
130 }
131
132
138 public bool IsInside( Vector point )
139 {
140 return point.X >= Left && point.X <= Right && point.Y >= Bottom && point.Y <= Top;
141 }
142
150 {
151 bool xcond = a.Right >= b.Left && a.Left <= b.Right || b.Right >= a.Left && b.Left <= a.Right;
152 bool ycond = a.Top >= b.Bottom && a.Bottom <= b.Top || b.Top >= a.Bottom && b.Bottom <= a.Top;
153 return xcond && ycond;
154 }
155
163 {
164 double left = Math.Max( a.Left, b.Left );
165 double top = Math.Min( a.Top, b.Top );
166 double right = Math.Min( a.Right, b.Right );
167 double bot = Math.Max( a.Bottom, b.Bottom );
168
169 double iw = right - left;
170 double ih = top - bot;
171
172 return new BoundingRectangle( left + iw / 2, bot + ih / 2, iw, ih );
173 }
174
182 {
183 double dx = rect.X - intersection.X;
184 double dy = rect.Y - intersection.Y;
185 double adx = Math.Abs( dx );
186 double ady = Math.Abs( dy );
187
188 if ( adx > ady )
189 {
190 if ( dx < 0 ) return Direction.Left;
191 return Direction.Right;
192 }
193
194 if ( dy < 0 ) return Direction.Down;
195 return Direction.Up;
196 }
197 }
198}
double Top
Suorakaiteen yläreunan Y
double Y
Suorakaiteen keskipisteen Y
double DiagonalLength
Suorakaiteen lävistäjän pituus
Vector Position
Suorakaiteen keskipiste
static bool Intersects(BoundingRectangle a, BoundingRectangle b)
Leikkaavatko suorakaiteet toisiaan
double X
Suorakaiteen keskipisteen X
BoundingRectangle(Vector topLeft, Vector bottomRight)
Alustetaan suorakaiden nurkkapisteiden avulla
static Direction GetIntersectionDirection(BoundingRectangle rect, BoundingRectangle intersection)
Mihin suuntaan leikkaus on suhteessa suorakaiteen keskipistettä
Vector Size
Suorakaiteen koko
static BoundingRectangle GetIntersection(BoundingRectangle a, BoundingRectangle b)
Suorakaiteiden leikkaus
double Right
Suorakaiteen oikean reunan X
Vector TopRight
Suorakaiteen oikean ylönurkan koordinaatti
double Height
Suorakaiteen korkeus
double Left
Suorakaiteen vasemman reunan X
Vector BottomRight
Suorakaiteen oikean alanurkan koordinaatti
bool IsInside(Vector point)
Tutkitaan onko piste suorakaiteen sisällä
BoundingRectangle(double x, double y, double w, double h)
Alustetaan suorakaide keskipisteen ja koon perusteella
double Width
Suorakaiteen leveyse
Vector TopLeft
Suorakaiteen vasemman ylänurkan koordinaatti
Vector BottomLeft
Suorakaiteen vasemman alanurkan koordinaatti
double Bottom
Suorakaiteen alareunen Y
Perussuunta tasossa.
Definition: Direction.cs:47
static Direction Up
Suunta ylös.
Definition: Direction.cs:56
static Direction Right
Suunta oikealle.
Definition: Direction.cs:71
static Direction Down
Suunta alas.
Definition: Direction.cs:61
static Direction Left
Suunta vasemmalle.
Definition: Direction.cs:66
2D-vektori.
Definition: Vector.cs:67
double Y
Vektorin Y-komponentti
Definition: Vector.cs:339
double X
Vektorin X-komponentti.
Definition: Vector.cs:334