added shapes/Cyl, needs finishing
git-svn-id: svn://anubis/fart/trunk@130 7f9b0f55-74a9-4bce-be96-3c2cd072584d
This commit is contained in:
parent
395161eb66
commit
561098001a
57
shapes/Cyl.cc
Normal file
57
shapes/Cyl.cc
Normal file
@ -0,0 +1,57 @@
|
||||
|
||||
#include "Cyl.h"
|
||||
#include "util/Solver.h"
|
||||
#include <math.h>
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
#define FP_EQUAL(x,y) (fabs((x)-(y)) < 0.000001)
|
||||
|
||||
Cyl::Cyl(double bottom_radius, double top_radius, double height)
|
||||
{
|
||||
m_bottom_radius = fabs(bottom_radius);
|
||||
m_bottom_radius_2 = bottom_radius * bottom_radius;
|
||||
m_top_radius = fabs(top_radius);
|
||||
m_top_radius_2 = top_radius * top_radius;
|
||||
m_height = fabs(height);
|
||||
if (m_height == 0.0)
|
||||
m_height = 1.0;
|
||||
}
|
||||
|
||||
Shape::IntersectList Cyl::intersect(const Ray & ray)
|
||||
{
|
||||
Ray ray_inv = m_inverse.transform_ray(ray);
|
||||
|
||||
IntersectList res;
|
||||
/*
|
||||
* Ray equation: R = R0 + tRd
|
||||
* x = R0x + tRdx
|
||||
* y = R0y + tRdy
|
||||
* z = R0z + tRdz
|
||||
* Side equation: x^2 + y^2 =
|
||||
* Combined:
|
||||
*/
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
Vector Cyl::getNormalAt(const Vector & pt)
|
||||
{
|
||||
Vector local_pt = m_inverse.transform_point(pt);
|
||||
|
||||
Vector normal;
|
||||
|
||||
if ( FP_EQUAL(local_pt[2], 0.0) && m_bottom_radius > 0.0 )
|
||||
{
|
||||
normal = Vector(0, 0, -1);
|
||||
}
|
||||
else if ( FP_EQUAL(local_pt[2], m_height) && m_top_radius > 0.0 )
|
||||
{
|
||||
normal = Vector(0, 0, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
|
||||
return m_transform.transform_normal(normal);
|
||||
}
|
23
shapes/Cyl.h
Normal file
23
shapes/Cyl.h
Normal file
@ -0,0 +1,23 @@
|
||||
|
||||
#ifndef CYL_H
|
||||
#define CYL_H CYL_H
|
||||
|
||||
#include "Shape.h"
|
||||
|
||||
class Cyl : public Shape
|
||||
{
|
||||
public:
|
||||
Cyl(double bottom_radius, double top_radius, double height);
|
||||
IntersectList intersect(const Ray & ray);
|
||||
Vector getNormalAt(const Vector & pt);
|
||||
|
||||
protected:
|
||||
double m_bottom_radius;
|
||||
double m_bottom_radius_2;
|
||||
double m_top_radius;
|
||||
double m_top_radius_2;
|
||||
double m_height;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user