@@ -133,7 +133,7 @@ doloop: | |||
; | |||
pre_brace_command: | |||
T_DUPLICATE { mc.m_mesh.DupAndScale(vec3::one, true); } | |||
T_DUPLICATE { mc.m_mesh.DupAndScale(vec3(1.f), true); } | |||
; | |||
mesh_open: | |||
@@ -490,7 +490,7 @@ namespace lol { | |||
/* Line 677 of lalr1.cc */ | |||
#line 136 "easymesh/easymesh-parser.y" | |||
{ mc.m_mesh.DupAndScale(vec3::one, true); } | |||
{ mc.m_mesh.DupAndScale(vec3(1.f), true); } | |||
break; | |||
case 22: | |||
@@ -107,6 +107,7 @@ void *IndexBuffer::Lock(size_t offset, size_t size) | |||
Abort(); | |||
return ret; | |||
#else | |||
UNUSED(size); | |||
return m_data->m_memory + offset; | |||
#endif | |||
} | |||
@@ -32,7 +32,7 @@ void DrawInner(TREE *tree, Array<TBB, vec4> &boxes, | |||
Array<TE *, int, vec4> &elements, | |||
Array<int, TBB> &leaves, int children, vec4 color) | |||
{ | |||
boxes.Push(tree->GetAABB(), vec4::one); | |||
boxes.Push(tree->GetAABB(), vec4(1.f)); | |||
leaves.Push(0, boxes.Last().m1); | |||
while (leaves.Count() > 0) | |||
{ | |||
@@ -49,7 +49,7 @@ void DrawInner(TREE *tree, Array<TBB, vec4> &boxes, | |||
} | |||
} | |||
if (!done) | |||
elements.Push(tree->GetElements()[tree->GetTree()[leaves[0].m1].m_elements[j]].m_element, 1, vec4::v1001); | |||
elements.Push(tree->GetElements()[tree->GetTree()[leaves[0].m1].m_elements[j]].m_element, 1, vec4(1, 0, 0, 1)); | |||
} | |||
for (int i = 0; i < children; i++) | |||
@@ -75,8 +75,8 @@ void Draw(Quadtree<TE>* tree, vec4 color) | |||
DrawInner<Quadtree<TE>, TE, box2>(tree, boxes, elements, leaves, 4, color); | |||
vec3 off = vec3::v010 * .1f; | |||
vec3 add = vec3::v010 * .1f; | |||
vec3 off = vec3(0.0f, 0.1f, 0.0f); | |||
//vec3 add = vec3(0.0f, 0.1f, 0.0f); | |||
while (boxes.Count() > 0) | |||
{ | |||
Debug::DrawBox(vec3(boxes[0].m1.A.x, tree->m_debug_y_offset, boxes[0].m1.A.y), | |||
@@ -106,11 +106,11 @@ void Draw(Octree<TE>* tree, vec4 color) | |||
DrawInner<Octree<TE>, TE, box3>(tree, boxes, elements, leaves, 8, color); | |||
vec3 off = vec3::v010 * .1f; | |||
vec3 add = vec3::v010 * .1f; | |||
vec3 off = vec3(0.0f, 0.1f, 0.0f); | |||
//vec3 add = vec3(0.0f, 0.1f, 0.0f); | |||
while (boxes.Count() > 0) | |||
{ | |||
float size = boxes[0].m1.B.x - boxes[0].m1.A.x; | |||
//float size = boxes[0].m1.B.x - boxes[0].m1.A.x; | |||
Debug::DrawBox(vec3(boxes[0].m1.A.x, boxes[0].m1.A.y, boxes[0].m1.A.z) /* + off * (m_size.x / size) */, | |||
vec3(boxes[0].m1.B.x, boxes[0].m1.B.y, boxes[0].m1.B.z) /* + off * (m_size.x / size) */, | |||
boxes[0].m2); | |||
@@ -328,7 +328,7 @@ public: | |||
TV v(GetSubOffset(sub)); | |||
TV half_vec = (bbox.B - bbox.A) * .5f; | |||
return TB(bbox.A + half_vec * v, | |||
bbox.A + half_vec * (v + TV::one)); | |||
bbox.A + half_vec * (v + TV(1.f))); | |||
} | |||
//-- | |||
@@ -32,11 +32,11 @@ void Draw(PortalDoor<TE>& port, vec4 color) | |||
{ | |||
vec3 points[4]; port.GetPoints(points); | |||
//Draw normal | |||
// Draw normal | |||
vec3 p = port.m_center + port.m_up * port.m_size.y * .5f; | |||
Debug::DrawLine(p, p + port.m_normal, vec4::v1001); | |||
Debug::DrawLine(p, p + port.m_up, vec4::v0101); | |||
//draw door | |||
Debug::DrawLine(p, p + port.m_normal, vec4(1, 0, 0, 1)); | |||
Debug::DrawLine(p, p + port.m_up, vec4(0, 1, 0, 1)); | |||
// Draw door | |||
for (int l = 0; l < 4; l++) | |||
Debug::DrawLine(points[l], points[(l + 1) % 4], color); | |||
Debug::DrawLine(points[0], points[2], color); | |||
@@ -135,11 +135,11 @@ public: | |||
mat4 cam_mx = proj * view; | |||
mat4 inv_proj_mx = inverse(proj); | |||
//First: Check normal dot | |||
if (lol::abs(dot((inverse(view) * vec4::v0010).xyz, m_normal)) < .00001f) | |||
// First: Check normal dot | |||
if (lol::abs(dot(mat3(inverse(view)) * vec3(0.f, 0.f, 1.f), m_normal)) < .00001f) | |||
return false; | |||
//Second: convert in screen | |||
// Second: convert to screen coordinates | |||
vec3 port_2d[2] = { vec3(FLT_MAX), vec3(-FLT_MAX) }; | |||
vec3 door_points[4]; | |||
vec4 proj_p[4]; | |||
@@ -155,8 +155,8 @@ public: | |||
//Clamp points within screen | |||
port_2d[0] = lol::min(proj_p[i].xyz, port_2d[0]); | |||
port_2d[1] = lol::max(proj_p[i].xyz, port_2d[1]); | |||
port_2d[0] = vec3(lol::clamp(port_2d[0].xy, vec2::onen, vec2::one), port_2d[0].z); | |||
port_2d[1] = vec3(lol::clamp(port_2d[1].xy, vec2::onen, vec2::one), port_2d[1].z); | |||
port_2d[0] = vec3(lol::clamp(port_2d[0].xy, vec2(-1.f), vec2(1.f)), port_2d[0].z); | |||
port_2d[1] = vec3(lol::clamp(port_2d[1].xy, vec2(-1.f), vec2(1.f)), port_2d[1].z); | |||
} | |||
//Quit if door not within the screen | |||
@@ -165,8 +165,8 @@ public: | |||
return false; | |||
//Third: Convert back to view | |||
ivec2 j[4] = { ivec2::v00, ivec2::v01, ivec2::v11, ivec2::v10 }; | |||
vec3 frust[2] = { vec3::one * FLT_MAX, vec3::one * -FLT_MAX }; | |||
ivec2 j[4] = { ivec2(0), ivec2(0, 1), ivec2(1), ivec2(1, 0) }; | |||
vec3 frust[2] = { vec3(FLT_MAX), vec3(-FLT_MAX) }; | |||
for (int i = 0; i < 5; i++) | |||
{ | |||
int k = i % 4; | |||
@@ -219,7 +219,7 @@ public: | |||
return true; | |||
//Add points on test stuff | |||
pos_test += ivec3(lol::clamp(res_points[i], vec3::onen * 1.1f, vec3::one * 1.1f)); | |||
pos_test += ivec3(lol::clamp(res_points[i], vec3(-1.1f), vec3(1.1f))); | |||
} | |||
return false; | |||
@@ -308,17 +308,17 @@ public: | |||
for (int i = 0; i < visible_rooms[j]->m_doors.Count(); i++) | |||
{ | |||
PortalDoor<TE>* port = visible_rooms[j]->m_doors[i]; | |||
Debug::Draw(*port, vec4::v0111); | |||
Debug::Draw(*port, vec4(0, 1, 1, 1)); | |||
tmp += vec4(port->m_center, 1.f); | |||
} | |||
tmp /= tmp.w; | |||
Debug::DrawBox(tmp.xyz-vec3::one,tmp.xyz+vec3::one,vec4::v1101); | |||
Debug::DrawBox(tmp.xyz - vec3(1.f), tmp.xyz + vec3(1.f), vec4(1, 1, 0, 1)); | |||
} | |||
for (int i = 0; i < ignore_doors.Count(); i++) | |||
{ | |||
PortalDoor<TE>* port = ignore_doors[i]; | |||
Debug::Draw(*port, vec4::v1011); | |||
Debug::DrawViewProj(port->m_view, port->m_proj, vec4::v1011); | |||
Debug::Draw(*port, vec4(1, 0, 1, 1)); | |||
Debug::DrawViewProj(port->m_view, port->m_proj, vec4(1, 0, 1, 1)); | |||
} | |||
#endif //LOL_BUILD_DEBUG | |||
} | |||
@@ -251,23 +251,9 @@ template <typename T> struct Vec2 : BVec2<T> | |||
LOL_MEMBER_OPS(Vec2, x) | |||
//Constants: n post-fix is negative values | |||
static const Vec2<T> onen; | |||
static const Vec2<T> one; | |||
static const Vec2<T> zero; | |||
static const Vec2<T> axis_x; | |||
static const Vec2<T> axis_y; | |||
static const Vec2<T> axis_xn; | |||
static const Vec2<T> axis_yn; | |||
//Pos values | |||
static const Vec2<T> v11; | |||
static const Vec2<T> v00; | |||
static const Vec2<T> v01; | |||
static const Vec2<T> v10; | |||
//Neg values | |||
static const Vec2<T> v00n; | |||
static const Vec2<T> v01n; | |||
static const Vec2<T> v10n; | |||
template<typename U> | |||
friend std::ostream &operator<<(std::ostream &stream, Vec2<U> const &v); | |||
@@ -538,33 +524,10 @@ template <typename T> struct Vec3 : BVec3<T> | |||
LOL_MEMBER_OPS(Vec3, x) | |||
//Constants: n post-fix is negative values | |||
static const Vec3<T> onen; | |||
static const Vec3<T> one; | |||
static const Vec3<T> zero; | |||
static const Vec3<T> axis_x; | |||
static const Vec3<T> axis_y; | |||
static const Vec3<T> axis_z; | |||
static const Vec3<T> axis_xn; | |||
static const Vec3<T> axis_yn; | |||
static const Vec3<T> axis_zn; | |||
//Pos values | |||
static const Vec3<T> v111; | |||
static const Vec3<T> v000; | |||
static const Vec3<T> v100; | |||
static const Vec3<T> v010; | |||
static const Vec3<T> v001; | |||
static const Vec3<T> v110; | |||
static const Vec3<T> v101; | |||
static const Vec3<T> v011; | |||
//Neg values | |||
static const Vec3<T> v000n; | |||
static const Vec3<T> v100n; | |||
static const Vec3<T> v010n; | |||
static const Vec3<T> v001n; | |||
static const Vec3<T> v110n; | |||
static const Vec3<T> v101n; | |||
static const Vec3<T> v011n; | |||
template<typename U> | |||
friend std::ostream &operator<<(std::ostream &stream, Vec3<U> const &v); | |||
@@ -983,51 +946,11 @@ template <typename T> struct Vec4 : BVec4<T> | |||
LOL_MEMBER_OPS(Vec4, x) | |||
//Constants: n post-fix is negative values | |||
static const Vec4<T> onen; | |||
static const Vec4<T> one; | |||
static const Vec4<T> zero; | |||
static const Vec4<T> axis_x; | |||
static const Vec4<T> axis_y; | |||
static const Vec4<T> axis_z; | |||
static const Vec4<T> axis_w; | |||
static const Vec4<T> axis_xn; | |||
static const Vec4<T> axis_yn; | |||
static const Vec4<T> axis_zn; | |||
static const Vec4<T> axis_wn; | |||
//Pos values | |||
static const Vec4<T> v1111; //( 1, 1, 1, 1) | |||
static const Vec4<T> v0000; //( 0, 0, 0, 0) | |||
static const Vec4<T> v1000; //( 1, 0, 0, 0) | |||
static const Vec4<T> v0100; //( 0, 1, 0, 0) | |||
static const Vec4<T> v0010; //( 0, 0, 1, 0) | |||
static const Vec4<T> v0001; //( 0, 0, 0, 1) | |||
static const Vec4<T> v1100; //( 1, 1, 0, 0) | |||
static const Vec4<T> v0110; //( 0, 1, 1, 0) | |||
static const Vec4<T> v0011; //( 0, 0, 1, 1) | |||
static const Vec4<T> v1010; //( 1, 0, 1, 0) | |||
static const Vec4<T> v0101; //( 0, 1, 0, 1) | |||
static const Vec4<T> v1001; //( 1, 0, 0, 1) | |||
static const Vec4<T> v0111; //( 0, 1, 1, 1) | |||
static const Vec4<T> v1011; //( 1, 0, 1, 1) | |||
static const Vec4<T> v1101; //( 1, 1, 0, 1) | |||
static const Vec4<T> v1110; //( 1, 1, 1, 0) | |||
//Neg values | |||
static const Vec4<T> v0000n;//(-1,-1,-1,-1) | |||
static const Vec4<T> v1000n;//( 1,-1,-1,-1) | |||
static const Vec4<T> v0100n;//(-1, 1,-1,-1) | |||
static const Vec4<T> v0010n;//(-1,-1, 1,-1) | |||
static const Vec4<T> v0001n;//(-1,-1,-1, 1) | |||
static const Vec4<T> v1100n;//( 1, 1,-1,-1) | |||
static const Vec4<T> v0110n;//(-1, 1, 1,-1) | |||
static const Vec4<T> v0011n;//(-1,-1, 1, 1) | |||
static const Vec4<T> v1010n;//( 1,-1, 1,-1) | |||
static const Vec4<T> v0101n;//(-1, 1,-1, 1) | |||
static const Vec4<T> v1001n;//( 1,-1,-1, 1) | |||
static const Vec4<T> v0111n;//(-1, 1, 1, 1) | |||
static const Vec4<T> v1011n;//( 1,-1, 1, 1) | |||
static const Vec4<T> v1101n;//( 1, 1,-1, 1) | |||
static const Vec4<T> v1110n;//( 1, 1, 1,-1) | |||
template<typename U> | |||
friend std::ostream &operator<<(std::ostream &stream, Vec4<U> const &v); | |||
@@ -39,88 +39,20 @@ namespace lol { | |||
Mat4<type> const Mat4<type>::name = Mat4<type>((type)a); | |||
#define LOL_ALL_CONST_INNER(type) \ | |||
LOL_VEC_2_CONST(type, one, 1, 1) \ | |||
LOL_VEC_2_CONST(type, onen, -1,-1) \ | |||
LOL_VEC_2_CONST(type, zero, 0, 0) \ | |||
LOL_VEC_2_CONST(type, axis_x, 1, 0) \ | |||
LOL_VEC_2_CONST(type, axis_y, 0, 1) \ | |||
LOL_VEC_2_CONST(type, axis_xn, 1,-1) \ | |||
LOL_VEC_2_CONST(type, axis_yn, -1, 1) \ | |||
LOL_VEC_2_CONST(type, v11, 1, 1) \ | |||
LOL_VEC_2_CONST(type, v00, 0, 0) \ | |||
LOL_VEC_2_CONST(type, v01, 0, 1) \ | |||
LOL_VEC_2_CONST(type, v10, 1, 0) \ | |||
LOL_VEC_2_CONST(type, v00n, -1,-1) \ | |||
LOL_VEC_2_CONST(type, v01n, -1, 1) \ | |||
LOL_VEC_2_CONST(type, v10n, 1,-1) \ | |||
\ | |||
LOL_VEC_3_CONST(type, one, 1, 1, 1) \ | |||
LOL_VEC_3_CONST(type, onen, -1,-1,-1) \ | |||
LOL_VEC_3_CONST(type, zero, 0, 0, 0) \ | |||
LOL_VEC_3_CONST(type, axis_x, 1, 0, 0) \ | |||
LOL_VEC_3_CONST(type, axis_y, 0, 1, 0) \ | |||
LOL_VEC_3_CONST(type, axis_z, 0, 0, 1) \ | |||
LOL_VEC_3_CONST(type, axis_xn, -1, 0, 0) \ | |||
LOL_VEC_3_CONST(type, axis_yn, 0,-1, 0) \ | |||
LOL_VEC_3_CONST(type, axis_zn, 0, 0,-1) \ | |||
LOL_VEC_3_CONST(type, v111, 1, 1, 1) \ | |||
LOL_VEC_3_CONST(type, v000, 0, 0, 0) \ | |||
LOL_VEC_3_CONST(type, v100, 1, 0, 0) \ | |||
LOL_VEC_3_CONST(type, v010, 0, 1, 0) \ | |||
LOL_VEC_3_CONST(type, v001, 0, 0, 1) \ | |||
LOL_VEC_3_CONST(type, v110, 1, 1, 0) \ | |||
LOL_VEC_3_CONST(type, v101, 1, 0, 1) \ | |||
LOL_VEC_3_CONST(type, v011, 0, 1, 1) \ | |||
LOL_VEC_3_CONST(type, v000n, -1,-1,-1) \ | |||
LOL_VEC_3_CONST(type, v100n, 1,-1,-1) \ | |||
LOL_VEC_3_CONST(type, v010n, -1, 1,-1) \ | |||
LOL_VEC_3_CONST(type, v001n, -1,-1, 1) \ | |||
LOL_VEC_3_CONST(type, v110n, 1, 1,-1) \ | |||
LOL_VEC_3_CONST(type, v101n, 1,-1, 1) \ | |||
LOL_VEC_3_CONST(type, v011n, -1, 1, 1) \ | |||
\ | |||
LOL_VEC_4_CONST(type, one, 1, 1, 1, 1) \ | |||
LOL_VEC_4_CONST(type, onen, -1,-1,-1,-1) \ | |||
LOL_VEC_4_CONST(type, zero, 0, 0, 0, 0) \ | |||
LOL_VEC_4_CONST(type, axis_x, 1, 0, 0, 0) \ | |||
LOL_VEC_4_CONST(type, axis_y, 0, 1, 0, 0) \ | |||
LOL_VEC_4_CONST(type, axis_z, 0, 0, 1, 0) \ | |||
LOL_VEC_4_CONST(type, axis_w, 0, 0, 0, 1) \ | |||
LOL_VEC_4_CONST(type, axis_xn, -1, 0, 0, 0) \ | |||
LOL_VEC_4_CONST(type, axis_yn, 0,-1, 0, 0) \ | |||
LOL_VEC_4_CONST(type, axis_zn, 0, 0,-1, 0) \ | |||
LOL_VEC_4_CONST(type, axis_wn, 0, 0, 0,-1) \ | |||
LOL_VEC_4_CONST(type, v1111, 1, 1, 1, 1) \ | |||
LOL_VEC_4_CONST(type, v0000, 0, 0, 0, 0) \ | |||
LOL_VEC_4_CONST(type, v1000, 1, 0, 0, 0) \ | |||
LOL_VEC_4_CONST(type, v0100, 0, 1, 0, 0) \ | |||
LOL_VEC_4_CONST(type, v0010, 0, 0, 1, 0) \ | |||
LOL_VEC_4_CONST(type, v0001, 0, 0, 0, 1) \ | |||
LOL_VEC_4_CONST(type, v1100, 1, 1, 0, 0) \ | |||
LOL_VEC_4_CONST(type, v0110, 0, 1, 1, 0) \ | |||
LOL_VEC_4_CONST(type, v0011, 0, 0, 1, 1) \ | |||
LOL_VEC_4_CONST(type, v1010, 1, 0, 1, 0) \ | |||
LOL_VEC_4_CONST(type, v0101, 0, 1, 0, 1) \ | |||
LOL_VEC_4_CONST(type, v1001, 1, 0, 0, 1) \ | |||
LOL_VEC_4_CONST(type, v0111, 0, 1, 1, 1) \ | |||
LOL_VEC_4_CONST(type, v1011, 1, 0, 1, 1) \ | |||
LOL_VEC_4_CONST(type, v1101, 1, 1, 0, 1) \ | |||
LOL_VEC_4_CONST(type, v1110, 1, 1, 1, 0) \ | |||
LOL_VEC_4_CONST(type, v0000n, -1,-1,-1,-1) \ | |||
LOL_VEC_4_CONST(type, v1000n, 1,-1,-1,-1) \ | |||
LOL_VEC_4_CONST(type, v0100n, -1, 1,-1,-1) \ | |||
LOL_VEC_4_CONST(type, v0010n, -1,-1, 1,-1) \ | |||
LOL_VEC_4_CONST(type, v0001n, -1,-1,-1, 1) \ | |||
LOL_VEC_4_CONST(type, v1100n, 1, 1,-1,-1) \ | |||
LOL_VEC_4_CONST(type, v0110n, -1, 1, 1,-1) \ | |||
LOL_VEC_4_CONST(type, v0011n, -1,-1, 1, 1) \ | |||
LOL_VEC_4_CONST(type, v1010n, 1,-1, 1,-1) \ | |||
LOL_VEC_4_CONST(type, v0101n, -1, 1,-1, 1) \ | |||
LOL_VEC_4_CONST(type, v1001n, 1,-1,-1, 1) \ | |||
LOL_VEC_4_CONST(type, v0111n, -1, 1, 1, 1) \ | |||
LOL_VEC_4_CONST(type, v1011n, 1,-1, 1, 1) \ | |||
LOL_VEC_4_CONST(type, v1101n, 1, 1,-1, 1) \ | |||
LOL_VEC_4_CONST(type, v1110n, 1, 1, 1,-1) \ | |||
\ | |||
LOL_MAT_CONST(type, identity, 1) | |||
@@ -495,13 +495,13 @@ public: | |||
if (m_meshes.Count() && m_mesh_id >= 0) | |||
for (int i = 0; i < m_meshes[m_mesh_id].m1->GetVertexCount(); i++) | |||
tc.AddTarget((m_mat * mat4::translate(m_meshes[m_mesh_id].m1->GetVertexLocation(i))).v3.xyz); | |||
tc.AddTarget(box3(vec3::zero, vec3::one)); | |||
tc.AddTarget(box3(vec3(0.f), vec3(1.f))); | |||
for (int k = 0; k < m_ssetup->m_lights.Count() && m_ssetup->m_show_lights; ++k) | |||
{ | |||
vec3 light_pos = m_ssetup->m_lights[k]->GetPosition(); | |||
mat4 world_cam = m_camera->GetView(); | |||
light_pos = (inverse(world_cam) * vec4((world_cam * vec4(light_pos, 1.0f)).xyz * vec3::axis_z, 1.0f)).xyz; | |||
tc.AddTarget(box3(vec3::onen, vec3::one) + light_pos * | |||
tc.AddTarget(box3(vec3(-1.f), vec3(1.f)) + light_pos * | |||
((m_ssetup->m_lights[k]->GetType() == LightType::Directional)?(-1.f):(1.f))); | |||
} | |||
@@ -96,11 +96,11 @@ void RemezSolver::Init() | |||
m_control.Resize(m_order + 2); | |||
/* Pick up x_i where error will be 0 and compute f(x_i) */ | |||
real fxn[m_order + 1]; | |||
Array<real> fxn; | |||
for (int i = 0; i < m_order + 1; i++) | |||
{ | |||
m_zeroes[i] = (real)(2 * i - m_order) / (real)(m_order + 1); | |||
fxn[i] = EvalFunc(m_zeroes[i]); | |||
fxn.Push(EvalFunc(m_zeroes[i])); | |||
} | |||
/* We build a matrix of Chebishev evaluations: row i contains the | |||
@@ -109,10 +109,10 @@ void RemezSolver::Init() | |||
for (int i = 0; i < m_order + 1; i++) | |||
{ | |||
/* Compute the powers of x_i */ | |||
real powers[m_order + 1]; | |||
powers[0] = 1.0; | |||
Array<real> powers; | |||
powers.Push(real(1.0)); | |||
for (int n = 1; n < m_order + 1; n++) | |||
powers[n] = powers[n - 1] * m_zeroes[i]; | |||
powers.Push(powers.Last() * m_zeroes[i]); | |||
/* Compute the Chebishev evaluations at x_i */ | |||
for (int n = 0; n < m_order + 1; n++) | |||
@@ -239,9 +239,9 @@ real RemezSolver::FindExtrema() | |||
void RemezSolver::Step() | |||
{ | |||
/* Pick up x_i where error will be 0 and compute f(x_i) */ | |||
real fxn[m_order + 2]; | |||
Array<real> fxn; | |||
for (int i = 0; i < m_order + 2; i++) | |||
fxn[i] = EvalFunc(m_control[i]); | |||
fxn.Push(EvalFunc(m_control[i])); | |||
/* We build a matrix of Chebishev evaluations: row i contains the | |||
* evaluations of x_i for polynomial order n = 0, 1, ... */ | |||
@@ -249,10 +249,10 @@ void RemezSolver::Step() | |||
for (int i = 0; i < m_order + 2; i++) | |||
{ | |||
/* Compute the powers of x_i */ | |||
real powers[m_order + 1]; | |||
powers[0] = 1.0; | |||
Array<real> powers; | |||
powers.Push(real(1.0)); | |||
for (int n = 1; n < m_order + 1; n++) | |||
powers[n] = powers[n - 1] * m_control[i]; | |||
powers.Push(powers.Last() * m_control[i]); | |||
/* Compute the Chebishev evaluations at x_i */ | |||
for (int n = 0; n < m_order + 1; n++) | |||
@@ -307,32 +307,32 @@ void RemezSolver::PrintPoly() | |||
/* Transform Chebyshev polynomial weights into powers of X^i | |||
* in the [-1..1] range. */ | |||
real bn[m_order + 1]; | |||
Array<real> bn; | |||
for (int i = 0; i < m_order + 1; i++) | |||
{ | |||
bn[i] = 0; | |||
real tmp = 0; | |||
for (int j = 0; j < m_order + 1; j++) | |||
bn[i] += m_coeff[j] * (real)Cheby(j, i); | |||
tmp += m_coeff[j] * (real)Cheby(j, i); | |||
bn.Push(tmp); | |||
} | |||
/* Transform a polynomial in the [-1..1] range into a polynomial | |||
* in the [a..b] range. */ | |||
real k1p[m_order + 1], k2p[m_order + 1]; | |||
real an[m_order + 1]; | |||
Array<real> k1p, k2p, an; | |||
for (int i = 0; i < m_order + 1; i++) | |||
{ | |||
k1p[i] = i ? k1p[i - 1] * m_invk1 : (real)1; | |||
k2p[i] = i ? k2p[i - 1] * m_invk2 : (real)1; | |||
k1p.Push(i ? k1p[i - 1] * m_invk1 : (real)1); | |||
k2p.Push(i ? k2p[i - 1] * m_invk2 : (real)1); | |||
} | |||
for (int i = 0; i < m_order + 1; i++) | |||
{ | |||
an[i] = 0; | |||
real tmp = 0; | |||
for (int j = i; j < m_order + 1; j++) | |||
an[i] += (real)Comb(j, i) * k1p[j - i] * bn[j]; | |||
an[i] *= k2p[i]; | |||
tmp += (real)Comb(j, i) * k1p[j - i] * bn[j]; | |||
an.Push(tmp * k2p[i]); | |||
} | |||
printf("Polynomial estimate: "); | |||