29 using System.Collections.Generic;
30 using System.Diagnostics;
31 using System.Globalization;
33 using OpenSim.Region.PhysicsModules.SharedBase;
34 using OpenSim.Region.PhysicsModule.Meshing;
36 public class Vertex : IComparable<Vertex>
42 get {
return vector.X; }
43 set { vector.X = value; }
48 get {
return vector.Y; }
49 set { vector.Y = value; }
54 get {
return vector.Z; }
55 set { vector.Z = value; }
58 public Vertex(
float x,
float y,
float z)
67 float tlength = vector.Length();
70 float mul = 1.0f / tlength;
75 return new Vertex(0f, 0f, 0f);
87 #pragma warning disable 0108
94 v2.X = q.W * q.W * v.X +
95 2f * q.Y * q.W * v.Z -
96 2f * q.Z * q.W * v.Y +
98 2f * q.Y * q.X * v.Y +
99 2f * q.Z * q.X * v.Z -
104 2f * q.X * q.Y * v.X +
106 2f * q.Z * q.Y * v.Z +
107 2f * q.W * q.Z * v.X -
110 2f * q.X * q.W * v.Z -
114 2f * q.X * q.Z * v.X +
115 2f * q.Y * q.Z * v.Y +
117 2f * q.W * q.Y * v.X -
119 2f * q.W * q.X * v.Y -
128 return new Vertex(v1.
X + v2.
X, v1.
Y + v2.
Y, v1.
Z + v2.
Z);
133 return new Vertex(v1.
X - v2.
X, v1.
Y - v2.
Y, v1.
Z - v2.
Z);
138 return new Vertex(v1.
X * v2.
X, v1.
Y * v2.
Y, v1.
Z * v2.
Z);
169 return new Vertex(0f,0f,0f);
171 float mul = 1.0f / am;
177 #pragma warning restore 0108
182 return X * v.X +
Y * v.Y +
Z * v.Z;
197 return new Vertex((
float) Math.Cos(angle), (float) Math.Sin(angle), 0.0f);
202 return vector.Length();
208 float d = diff.Length();
241 return me.CompareTo(other) > 0;
246 return me.CompareTo(other) < 0;
257 NumberFormatInfo nfi =
new NumberFormatInfo();
258 nfi.NumberDecimalSeparator =
".";
259 nfi.NumberDecimalDigits = 3;
261 String s1 = X.ToString(
"N2", nfi) +
" " +
Y.ToString(
"N2", nfi) +
" " + Z.ToString(
"N2", nfi);
273 private float radius_square;
295 if (dd < radius_square)
305 return (radius_square == 0.0);
308 private void CalcCircle()
312 double p1x, p2x, p1y, p2y, p3x, p3y;
329 double v1x, v1y, v2x, v2y;
346 c1 = (p1x*p1x + p1y*p1y - p2x*p2x - p2y*p2y)/2;
347 c2 = (p1x*p1x + p1y*p1y - p3x*p3x - p3y*p3y)/2;
355 z = (c1*v2x - c2*v1x);
356 n = (v1y*v2x - v2y*v1x);
360 radius_square = 0.0f;
368 cx = (float) ((c2 - v2y*cy)/v2x);
372 cx = (float) ((c1 - v1y*cy)/v1x);
376 Debug.Assert(
false,
"Malformed triangle");
382 radius_square = (float) (rx*rx + ry*ry);
387 NumberFormatInfo nfi =
new NumberFormatInfo();
388 nfi.CurrencyDecimalDigits = 2;
389 nfi.CurrencyDecimalSeparator =
".";
391 String s1 =
"<" + v1.X.ToString(nfi) +
"," +
v1.
Y.ToString(nfi) +
"," + v1.Z.ToString(nfi) +
">";
392 String s2 =
"<" + v2.X.ToString(nfi) +
"," +
v2.
Y.ToString(nfi) +
"," + v2.Z.ToString(nfi) +
">";
393 String s3 =
"<" + v3.X.ToString(nfi) +
"," +
v3.
Y.ToString(nfi) +
"," + v3.Z.ToString(nfi) +
">";
395 return s1 +
";" + s2 +
";" + s3;
410 Vector3 n = Vector3.Cross(e1, e2);
413 float l = n.Length();
433 String output = v1.ToRaw() +
" " +
v2.
ToRaw() +
" " + v3.ToRaw();
static bool operator>(Vertex me, Vertex other)
static Vertex operator+(Vertex v1, Vertex v2)
virtual bool Equals(Vertex v, float tolerance)
override String ToString()
Triangle(Vertex _v1, Vertex _v2, Vertex _v3)
static Vertex operator/(Vertex v1, float am)
static Vertex operator-(Vertex v1, Vertex v2)
int CompareTo(Vertex other)
bool isInCircle(float x, float y)
static Vertex FromAngle(double angle)
Vertex(float x, float y, float z)
OpenSim.Region.ScriptEngine.Shared.LSL_Types.Vector3 vector
static bool operator<(Vertex me, Vertex other)
static Vertex operator*(Vertex v, Quaternion q)