问题三十五: 怎么用ray tracing画二次曲面(quadratic surfaces)(4)——双曲抛物面(马鞍面)

35.4 双曲抛物面(马鞍面)

35.4.1 数学推导

双曲抛物面的方程如下:


35.4.2 看C++代码实现

---------------------------------------------quadratic_hyperbolic_paraboloid.h ------------------------------------

quadratic_hyperbolic_paraboloid.h

 

#ifndef QUADRATIC_HYPERBOLIC_PARABOLOID_H
#define QUADRATIC_HYPERBOLIC_PARABOLOID_H

#include <hitable.h>


class quadratic_hyperbolic_paraboloid : public hitable
{
    public:
        quadratic_hyperbolic_paraboloid() {}
        quadratic_hyperbolic_paraboloid(vec3 cen, float p, float q, int hy, int wx, material *m) : center(cen), focus_directrix_p(p), focus_directrix_q(-q), height_half_y(hy), width_x(wx), ma(m) {}
/*
(x-xc)^2/2*p + (z-zc)^2/2*q = (y-yc)
(p>0, q>0)
*/
        virtual bool hit(const ray& r, float tmin, float tmax, hit_record& rec) const;
        vec3 center;
        float focus_directrix_p;
        float focus_directrix_q;
        int height_half_y, width_x;
        material *ma;
};

#endif // QUADRATIC_HYPERBOLIC_PARABOLOID_H


-------------------------------------------quadratic_hyperbolic_paraboloid.cpp ----------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值