Beispiel #1
0
    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();
    }
Beispiel #2
0
    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));
    }
Beispiel #3
0
    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;
    }
Beispiel #4
0
    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());
    }