Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
Segment3.cs
浏览该文件的文档.
1using Engine;
2
3namespace Game {
4 public struct Segment3 {
5 public Vector3 Start;
6
7 public Vector3 End;
8
9 public Segment3(Vector3 start, Vector3 end) {
10 Start = start;
11 End = end;
12 }
13
14 public override string ToString() => $"{Start.X}, {Start.Y}, {Start.Z}, {End.X}, {End.Y}, {End.Z}";
15
16 public static float Distance(Segment3 s, Vector3 p) {
17 Vector3 v = s.End - s.Start;
18 Vector3 v2 = s.Start - p;
19 Vector3 v3 = s.End - p;
20 float num = Vector3.Dot(v2, v);
21 if (num * Vector3.Dot(v3, v) <= 0f) {
22 float num2 = v.LengthSquared();
23 if (num2 == 0f) {
24 return Vector3.Distance(p, s.Start);
25 }
26 return MathF.Sqrt(Vector3.Cross(p - s.Start, v).LengthSquared() / num2);
27 }
28 if (!(num > 0f)) {
29 return v3.Length();
30 }
31 return v2.Length();
32 }
33
34 public static Vector3 NearestPoint(Segment3 s, Vector3 p) {
35 Vector3 v = s.End - s.Start;
36 Vector3 v2 = s.Start - p;
37 Vector3 v3 = s.End - p;
38 float num = Vector3.Dot(v2, v);
39 if (num * Vector3.Dot(v3, v) <= 0f) {
40 float num2 = v.LengthSquared();
41 if (num2 == 0f) {
42 return s.Start;
43 }
44 float num3 = MathF.Sqrt(v2.LengthSquared() - Vector3.Cross(p - s.Start, v).LengthSquared() / num2);
45 return Vector3.Lerp(s.Start, s.End, num3 / MathF.Sqrt(num2));
46 }
47 if (!(num > 0f)) {
48 return s.End;
49 }
50 return s.Start;
51 }
52 }
53}
static Vector3 Lerp(Vector3 v1, Vector3 v2, float f)
static Vector3 Cross(Vector3 v1, Vector3 v2)
static float Distance(Vector3 v1, Vector3 v2)
float LengthSquared()
static float Dot(Vector3 v1, Vector3 v2)
static Vector3 NearestPoint(Segment3 s, Vector3 p)
override string ToString()
Segment3(Vector3 start, Vector3 end)
static float Distance(Segment3 s, Vector3 p)