Move source to src.
This commit is contained in:
parent
6f246722f9
commit
2442efc1a6
82 changed files with 13 additions and 236 deletions
|
|
@ -1,89 +0,0 @@
|
|||
// -*- C++ -*-
|
||||
|
||||
#include <math.h>
|
||||
|
||||
#include "particle.h"
|
||||
#include "rotation.h"
|
||||
|
||||
using namespace mbostock;
|
||||
|
||||
Rotation::Rotation(const Vector& origin, const Vector& axis,
|
||||
float speed, float angle)
|
||||
: origin_(origin), axis_(axis), startAngle_(angle),
|
||||
speed_(speed * ParticleSimulator::timeStep()), angle_(angle) {
|
||||
update();
|
||||
}
|
||||
|
||||
void Rotation::reset() {
|
||||
angle_ = startAngle_;
|
||||
}
|
||||
|
||||
void Rotation::step() {
|
||||
if (!enabled()) {
|
||||
return;
|
||||
}
|
||||
angle_ += speed_;
|
||||
angle_ = fmodf(angle_, 360.f);
|
||||
update();
|
||||
}
|
||||
|
||||
void Rotation::update() {
|
||||
float r = angle_ * (2.f * M_PI / 360.f);
|
||||
float c = cosf(r);
|
||||
float s = sinf(r);
|
||||
|
||||
/* This look familiar to anyone? /wink */
|
||||
matrix_[0] = axis_.x * axis_.x * (1.f - c) + c;
|
||||
matrix_[1] = axis_.x * axis_.y * (1.f - c) - axis_.z * s;
|
||||
matrix_[2] = axis_.x * axis_.z * (1.f - c) + axis_.y * s;
|
||||
matrix_[3] = axis_.y * axis_.x * (1.f - c) + axis_.z * s;
|
||||
matrix_[4] = axis_.y * axis_.y * (1.f - c) + c;
|
||||
matrix_[5] = axis_.y * axis_.z * (1.f - c) - axis_.x * s;
|
||||
matrix_[6] = axis_.x * axis_.z * (1.f - c) - axis_.y * s;
|
||||
matrix_[7] = axis_.y * axis_.z * (1.f - c) + axis_.x * s;
|
||||
matrix_[8] = axis_.z * axis_.z * (1.f - c) + c;
|
||||
}
|
||||
|
||||
Vector Rotation::point(const Vector& x) const {
|
||||
return origin_ + vector(x - origin_);
|
||||
}
|
||||
|
||||
Vector Rotation::pointInverse(const Vector& x) const {
|
||||
return origin_ + vectorInverse(x - origin_);
|
||||
}
|
||||
|
||||
Vector Rotation::vector(const Vector& x) const {
|
||||
return Vector(
|
||||
matrix_[0] * x.x + matrix_[1] * x.y + matrix_[2] * x.z,
|
||||
matrix_[3] * x.x + matrix_[4] * x.y + matrix_[5] * x.z,
|
||||
matrix_[6] * x.x + matrix_[7] * x.y + matrix_[8] * x.z);
|
||||
}
|
||||
|
||||
Vector Rotation::vectorInverse(const Vector& x) const {
|
||||
return Vector(
|
||||
matrix_[0] * x.x + matrix_[3] * x.y + matrix_[6] * x.z,
|
||||
matrix_[1] * x.x + matrix_[4] * x.y + matrix_[7] * x.z,
|
||||
matrix_[2] * x.x + matrix_[5] * x.y + matrix_[8] * x.z);
|
||||
}
|
||||
|
||||
Vector Rotation::velocity(const Vector& x) const {
|
||||
return enabled()
|
||||
? (origin_ - x).cross(axis_) * speed_ * (2.f * M_PI / 360.f)
|
||||
: Vector::ZERO();
|
||||
}
|
||||
|
||||
RotatingShape::RotatingShape(const Shape& s, const Rotation& r)
|
||||
: shape_(s), rotation_(r) {
|
||||
}
|
||||
|
||||
bool RotatingShape::intersects(const Sphere& s) const {
|
||||
Sphere rs(rotation_.pointInverse(s.x()), s.radius());
|
||||
return shape_.intersects(rs);
|
||||
}
|
||||
|
||||
Projection RotatingShape::project(const Vector& x) const {
|
||||
Projection p = shape_.project(rotation_.pointInverse(x));
|
||||
p.x = rotation_.point(p.x);
|
||||
p.normal = rotation_.vector(p.normal);
|
||||
return p;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue