public Sphere(TScalar radius, Vector3 <TScalar> position) { Position = position; Radius = radius; HighestPoint = Position + (Vector3 <TScalar> .UnitY * radius); LowestPoint = Position + (-Vector3 <TScalar> .UnitY * radius); Volume = NumberValues.FourThirdsPi <TScalar>() * Radius.Cube(); }
public HollowSphere(TScalar innerRadius, TScalar outerRadius, Vector3 <TScalar> position) { InnerRadius = innerRadius; OuterRadius = outerRadius; Position = position; HighestPoint = Position + (Vector3 <TScalar> .UnitY * outerRadius); LowestPoint = Position + (-Vector3 <TScalar> .UnitY * outerRadius); var fourThirdsPi = NumberValues.FourThirdsPi <TScalar>(); var three = NumberValues.Three <TScalar>(); Volume = (fourThirdsPi * TScalar.Pow(OuterRadius, three)) - (fourThirdsPi * TScalar.Pow(InnerRadius, three)); }
public Ellipsoid(TScalar axisX, TScalar axisY, TScalar axisZ, Vector3 <TScalar> position, Quaternion <TScalar> rotation) { AxisX = axisX; AxisY = axisY; AxisZ = axisZ; Position = position; Rotation = rotation; ContainingRadius = TScalar.Max(AxisX, TScalar.Max(AxisY, AxisZ)); var x = Vector3 <TScalar> .Transform(Vector3 <TScalar> .UnitX *AxisX, Rotation); var y = Vector3 <TScalar> .Transform(Vector3 <TScalar> .UnitY *AxisY, Rotation); var z = Vector3 <TScalar> .Transform(Vector3 <TScalar> .UnitZ *AxisZ, Rotation); var points = new Vector3 <TScalar>[6] { Position + x, Position + y, Position + z, Position - x, Position - y, Position - z, }; HighestPoint = points[0]; LowestPoint = points[0]; for (var i = 0; i < 6; i++) { if (points[i].Y > HighestPoint.Y) { HighestPoint = points[i]; } if (points[i].Y < LowestPoint.Y) { LowestPoint = points[i]; } } SmallestDimension = TScalar.Min(AxisX, TScalar.Min(AxisY, AxisZ)); Volume = NumberValues.FourThirdsPi <TScalar>() * AxisX * AxisY * AxisZ; }
public Capsule(Vector3 <TScalar> axis, TScalar radius, Vector3 <TScalar> position) { Axis = axis; Position = position; Radius = radius; var two = NumberValues.Two <TScalar>(); _pathLength = Vector3 <TScalar> .Length(axis); var twoR = Radius * two; Length = _pathLength + twoR; var halfHeight = _pathLength / two; ContainingRadius = halfHeight + Radius; var _halfPath = Vector3 <TScalar> .Normalize(axis) * halfHeight; _start = Position - _halfPath; _end = _start + axis; var y = Vector3 <TScalar> .UnitY * Radius; if (_end.Y >= _start.Y) { HighestPoint = _end + y; LowestPoint = _start - y; } else { HighestPoint = _start + y; LowestPoint = _end - y; } SmallestDimension = TScalar.Min(Length, twoR); Volume = (TScalar.Pi * Radius * Radius * _pathLength) + (NumberValues.FourThirdsPi <TScalar>() * Radius.Cube()); }