blob: 492f0f6c0795595339ea49adb77a47e7e3cd86d4 [file] [log] [blame]
// Copyright (c) 2015, Google Inc. Please see the AUTHORS file for details.
// All rights reserved. Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
part of vector_math;
/// Defines a sphere with a [center] and a [radius].
class Sphere {
final Vector3 _center;
/// The [radius] of the sphere.
double radius;
/// The [center] of the sphere.
Vector3 get center => _center;
/// Create a new, uninitialized sphere.
Sphere()
: _center = Vector3.zero(),
radius = 0.0;
/// Create a sphere as a copy of [other].
Sphere.copy(Sphere other)
: _center = Vector3.copy(other._center),
radius = other.radius;
/// Create a sphere from a [center] and a [radius].
Sphere.centerRadius(Vector3 center, this.radius)
: _center = Vector3.copy(center);
/// Copy the sphere from [other] into this.
void copyFrom(Sphere other) {
_center.setFrom(other._center);
radius = other.radius;
}
/// Return if this contains [other].
bool containsVector3(Vector3 other) =>
other.distanceToSquared(center) < radius * radius;
/// Return if this intersects with [other].
bool intersectsWithVector3(Vector3 other) =>
other.distanceToSquared(center) <= radius * radius;
/// Return if this intersects with [other].
bool intersectsWithSphere(Sphere other) {
final radiusSum = radius + other.radius;
return other.center.distanceToSquared(center) <= (radiusSum * radiusSum);
}
}