34 LPoint3 BoundingLine::
35 get_approx_center()
const {
36 nassertr(!
is_empty(), LPoint3(0.0f, 0.0f, 0.0f));
37 nassertr(!
is_infinite(), LPoint3(0.0f, 0.0f, 0.0f));
45 xform(
const LMatrix4 &mat) {
46 nassertv(!mat.is_nan());
49 _origin = _origin * mat;
50 _vector = _vector * mat;
51 if (!_vector.normalize()) {
63 output(std::ostream &out)
const {
65 out <<
"bline, empty";
67 out <<
"bline, infinite";
69 out <<
"bline, (" << _origin <<
") - (" << _origin + _vector <<
")";
87 return other->extend_by_line(
this);
97 return other->around_lines(first, last);
105 return other->contains_line(
this);
117 _origin = line->_origin;
118 _vector = line->_vector;
134 PN_stdfloat r = sphere->get_radius();
136 if (r * r >= sqr_dist_to_line(sphere->get_center())) {
137 return IF_possible | IF_some;
139 return IF_no_intersection;
152 PN_stdfloat r2 = (box->
get_maxq() - box->
get_minq()).length_squared() * 0.25f;
154 if (r2 >= sqr_dist_to_line(center)) {
157 return IF_no_intersection;
164 PN_stdfloat BoundingLine::
165 sqr_dist_to_line(
const LPoint3 &point)
const {
166 nassertr(!point.is_nan(), 0.0f);
168 nassertr(!_vector.almost_equal(LVector3(0.0f, 0.0f, 0.0f)), 0.0f);
173 PN_stdfloat A = dot(_vector, _vector);
174 nassertr(A != 0.0f, 0.0f);
175 LVector3 fc = _origin - point;
176 PN_stdfloat B = 2.0 * dot(_vector, fc);
177 PN_stdfloat fc_d2 = dot(fc, fc);
179 PN_stdfloat r2 = fc_d2 - B*B / 4.0*A;
181 nassertr(!cnan(r2), 0.0f);
An axis-aligned bounding box; that is, a minimum and maximum coordinate triple.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
bool is_empty() const
Any kind of volume might be empty.
This defines a bounding sphere, consisting of a center and a radius.
bool is_infinite() const
The other side of the empty coin is an infinite volume.
virtual const BoundingLine * as_bounding_line() const
Virtual downcast method.
const LPoint3 & get_point_a() const
Returns the first point that defines the line.
This is an abstract class for any volume in any sense which can be said to define the locality of ref...
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
const LPoint3 & get_maxq() const
An inline accessor for the maximum value.
LPoint3 get_point_b() const
Returns the second point that defines the line.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
TypeHandle is the identifier used to differentiate C++ class types.
This funny bounding volume is an infinite line with no thickness and extending to infinity in both di...
const LPoint3 & get_minq() const
An inline accessor for the minimum value.