Falco Engine 3.9.0.1 (beta)
Plane.cs
Go to the documentation of this file.
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5
6namespace FalcoEngine
7{
8 public struct Plane
9 {
10 internal const int size = 16;
11
12 private Vector3 m_Normal;
13
14 private float m_Distance;
15
20 {
21 get
22 {
23 return m_Normal;
24 }
25 set
26 {
27 m_Normal = value;
28 }
29 }
30
34 public float distance
35 {
36 get
37 {
38 return m_Distance;
39 }
40 set
41 {
42 m_Distance = value;
43 }
44 }
45
49 public Plane flipped => new Plane(-m_Normal, 0f - m_Distance);
50
56 public Plane(Vector3 inNormal, Vector3 inPoint)
57 {
58 m_Normal = Vector3.Normalize(inNormal);
59 m_Distance = 0f - Vector3.Dot(m_Normal, inPoint);
60 }
61
67 public Plane(Vector3 inNormal, float d)
68 {
69 m_Normal = Vector3.Normalize(inNormal);
70 m_Distance = d;
71 }
72
79 public Plane(Vector3 a, Vector3 b, Vector3 c)
80 {
81 m_Normal = Vector3.Normalize(Vector3.Cross(b - a, c - a));
82 m_Distance = 0f - Vector3.Dot(m_Normal, a);
83 }
84
90 public void SetNormalAndPosition(Vector3 inNormal, Vector3 inPoint)
91 {
92 m_Normal = Vector3.Normalize(inNormal);
93 m_Distance = 0f - Vector3.Dot(inNormal, inPoint);
94 }
95
102 public void Set3Points(Vector3 a, Vector3 b, Vector3 c)
103 {
104 m_Normal = Vector3.Normalize(Vector3.Cross(b - a, c - a));
105 m_Distance = 0f - Vector3.Dot(m_Normal, a);
106 }
107
111 public void Flip()
112 {
113 m_Normal = -m_Normal;
114 m_Distance = 0f - m_Distance;
115 }
116
121 public void Translate(Vector3 translation)
122 {
123 m_Distance += Vector3.Dot(m_Normal, translation);
124 }
125
134 public static Plane Translate(Plane plane, Vector3 translation)
135 {
136 return new Plane(plane.m_Normal, plane.m_Distance += Vector3.Dot(plane.m_Normal, translation));
137 }
138
147 {
148 float d = Vector3.Dot(m_Normal, point) + m_Distance;
149 return point - m_Normal * d;
150 }
151
156 public float GetDistanceToPoint(Vector3 point)
157 {
158 return Vector3.Dot(m_Normal, point) + m_Distance;
159 }
160
165 public bool GetSide(Vector3 point)
166 {
167 return Vector3.Dot(m_Normal, point) + m_Distance > 0f;
168 }
169
175 public bool SameSide(Vector3 inPt0, Vector3 inPt1)
176 {
177 float distanceToPoint = GetDistanceToPoint(inPt0);
178 float distanceToPoint2 = GetDistanceToPoint(inPt1);
179 return (distanceToPoint > 0f && distanceToPoint2 > 0f) || (distanceToPoint <= 0f && distanceToPoint2 <= 0f);
180 }
181
182 public bool Raycast(Ray ray, out float enter)
183 {
184 float num = Vector3.Dot(ray.direction, m_Normal);
185 float num2 = 0f - Vector3.Dot(ray.origin, m_Normal) - m_Distance;
186 if (Mathf.Approximately(num, 0f))
187 {
188 enter = 0f;
189 return false;
190 }
191 enter = num2 / num;
192 return enter > 0f;
193 }
194
195 public override string ToString()
196 {
197 return String.Format("(normal:({0:F1}, {1:F1}, {2:F1}), distance:{3:F1})", m_Normal.x, m_Normal.y, m_Normal.z, m_Distance);
198 }
199
200 public string ToString(string format)
201 {
202 return String.Format("(normal:({0}, {1}, {2}), distance:{3})", m_Normal.x.ToString(format), m_Normal.y.ToString(format), m_Normal.z.ToString(format), m_Distance.ToString(format));
203 }
204 }
205}
static bool Approximately(float a, float b)
Definition: Mathf.cs:685
string ToString(string format)
Definition: Plane.cs:200
float GetDistanceToPoint(Vector3 point)
Definition: Plane.cs:156
Vector3 ClosestPointOnPlane(Vector3 point)
Definition: Plane.cs:146
float distance
Definition: Plane.cs:35
void Flip()
Definition: Plane.cs:111
Vector3 normal
Definition: Plane.cs:20
Plane(Vector3 a, Vector3 b, Vector3 c)
Definition: Plane.cs:79
void Set3Points(Vector3 a, Vector3 b, Vector3 c)
Definition: Plane.cs:102
void SetNormalAndPosition(Vector3 inNormal, Vector3 inPoint)
Definition: Plane.cs:90
Plane(Vector3 inNormal, float d)
Definition: Plane.cs:67
Plane flipped
Definition: Plane.cs:49
void Translate(Vector3 translation)
Definition: Plane.cs:121
static Plane Translate(Plane plane, Vector3 translation)
Definition: Plane.cs:134
bool Raycast(Ray ray, out float enter)
Definition: Plane.cs:182
bool SameSide(Vector3 inPt0, Vector3 inPt1)
Definition: Plane.cs:175
Plane(Vector3 inNormal, Vector3 inPoint)
Definition: Plane.cs:56
bool GetSide(Vector3 point)
Definition: Plane.cs:165
override string ToString()
Definition: Plane.cs:195
Vector3 direction
Definition: Ray.cs:33
Vector3 origin
Definition: Ray.cs:18
static Vector3 Normalize(Vector3 value)
Definition: Vector3.cs:207
static float Dot(Vector3 lhs, Vector3 rhs)
Definition: Vector3.cs:235
static Vector3 Cross(Vector3 lhs, Vector3 rhs)
Definition: Vector3.cs:188