You've already forked Dpr-ScriptsOnly
mirror of
https://github.com/izzy2lost/Dpr-ScriptsOnly.git
synced 2026-03-10 11:49:05 -07:00
168 lines
5.0 KiB
C#
168 lines
5.0 KiB
C#
using System;
|
|
using System.Runtime.InteropServices;
|
|
using UnityEngine;
|
|
|
|
namespace SmartPoint.Mathematics
|
|
{
|
|
public static class Vector3Ext
|
|
{
|
|
public static Vector3 FastClear(this ref Vector3 self)
|
|
{
|
|
return Vector3.zero;
|
|
}
|
|
|
|
public static Vector3 FastNegate(this ref Vector3 self)
|
|
{
|
|
return -self;
|
|
}
|
|
|
|
public static Vector3 FastReciprocal(this ref Vector3 self)
|
|
{
|
|
self.x = 1f / self.x;
|
|
self.y = 1f / self.y;
|
|
self.z = 1f / self.z;
|
|
return self;
|
|
}
|
|
|
|
public static Vector3 FastSet(this ref Vector3 self, float s)
|
|
{
|
|
return new Vector3(s, s, s);
|
|
}
|
|
|
|
public static Vector3 FastSet(this ref Vector3 self, float x, float y, float z)
|
|
{
|
|
return new Vector3(x, y, z);
|
|
}
|
|
|
|
public static Vector3 FastAdd(this ref Vector3 self, [In] ref Vector3 V)
|
|
{
|
|
return self + V;
|
|
}
|
|
|
|
public static Vector3 FastScale(this ref Vector3 self, float s)
|
|
{
|
|
return self * s;
|
|
}
|
|
|
|
public static Vector3 FastMul(this ref Vector3 self, [In] ref Vector3 V)
|
|
{
|
|
self.x *= V.x;
|
|
self.y *= V.y;
|
|
self.z *= V.z;
|
|
return self;
|
|
}
|
|
|
|
public static Vector3 FastScaleAdd(this ref Vector3 self, [In] ref Vector3 V, float s)
|
|
{
|
|
self.x += V.x * s;
|
|
self.y += V.y * s;
|
|
self.z += V.z * s;
|
|
return self;
|
|
}
|
|
|
|
public static Vector3 FastLerp(this ref Vector3 self, [In] ref Vector3 V, float s)
|
|
{
|
|
self.x += (V.x - self.x) * s;
|
|
self.y += (V.y - self.y) * s;
|
|
self.z += (V.z - self.z) * s;
|
|
return self;
|
|
}
|
|
|
|
public static float FastLengthSq(this ref Vector3 self)
|
|
{
|
|
return (self.x * self.x) + (self.y * self.y) + (self.z * self.z);
|
|
}
|
|
|
|
public static float FastDistanceSq(this ref Vector3 self, [In] ref Vector3 V)
|
|
{
|
|
var dx = self.x - V.x;
|
|
var dy = self.y - V.y;
|
|
var dz = self.z - V.z;
|
|
return dx * dx + dy * dy + dz * dz;
|
|
}
|
|
|
|
public static float FastLength(this ref Vector3 self)
|
|
{
|
|
return (float)Math.Sqrt((self.x * self.x) + (self.y * self.y) + (self.z * self.z));
|
|
}
|
|
|
|
public static float FastDot(this ref Vector3 self, [In] ref Vector3 V)
|
|
{
|
|
return (self.x * V.x) + (self.y * V.y) + (self.z * V.z);
|
|
}
|
|
|
|
public static Vector3 FastCross(this ref Vector3 self, [In] ref Vector3 V)
|
|
{
|
|
var x = (self.y * V.z) - (self.z * V.y);
|
|
var y = (self.z * V.x) - (V.z * self.x);
|
|
var z = (V.y * self.x) - (self.y * V.x);
|
|
self.x = x;
|
|
self.y = y;
|
|
self.z = z;
|
|
return self;
|
|
}
|
|
|
|
public static Vector3 FastCrossNormalize(this ref Vector3 self, [In] ref Vector3 V)
|
|
{
|
|
var x = (V.y * self.z) - (self.y * V.z);
|
|
var y = (self.z * V.x) - (self.x * V.z);
|
|
var z = (self.x * V.y) - (self.y * V.x);
|
|
float f = 1f / (float)Math.Sqrt((x * x) + (y * y) + (z * z));
|
|
self.x = x * f;
|
|
self.y = y * f;
|
|
self.z = z * f;
|
|
return self;
|
|
}
|
|
|
|
public static float FastNormalize(this ref Vector3 self)
|
|
{
|
|
float magnitudeSq = (self.x * self.x) + (self.y * self.y) + (self.z * self.z);
|
|
float magnitude = (float)Math.Sqrt(magnitudeSq);
|
|
if (magnitude >= 0.00001)
|
|
{
|
|
self.x /= magnitude;
|
|
self.y /= magnitude;
|
|
self.z /= magnitude;
|
|
}
|
|
else
|
|
{
|
|
self = Vector3.zero;
|
|
}
|
|
return magnitude;
|
|
}
|
|
|
|
public static Vector3 FastRotateX(this ref Vector3 self, float angle)
|
|
{
|
|
float cos = (float)Math.Cos(angle);
|
|
float sin = (float)Math.Sin(angle);
|
|
float newY = (self.y * cos) - (self.z * sin);
|
|
float newZ = (self.y * sin) + (self.z * cos);
|
|
self.y = newY;
|
|
self.z = newZ;
|
|
return self;
|
|
}
|
|
|
|
public static Vector3 FastRotateY(this ref Vector3 self, float angle)
|
|
{
|
|
float cos = (float)Math.Cos(angle);
|
|
float sin = (float)Math.Sin(angle);
|
|
float newX = (self.x * cos) + (self.z * sin);
|
|
float newZ = (self.z * cos) - (self.x * sin);
|
|
self.x = newX;
|
|
self.z = newZ;
|
|
return self;
|
|
}
|
|
|
|
public static Vector3 FastRotateZ(this ref Vector3 self, float angle)
|
|
{
|
|
float cos = (float)Math.Cos(angle);
|
|
float sin = (float)Math.Sin(angle);
|
|
float newX = (self.y * sin) + (self.x * cos);
|
|
float newY = (self.y * cos) - (self.x * sin);
|
|
self.x = newX;
|
|
self.y = newY;
|
|
return self;
|
|
}
|
|
}
|
|
}
|