精华内容
下载资源
问答
  • 双曲抛物面又称马鞍面,它在笛卡儿坐标系中的方程为: 其中x、y、z是平面直角坐标系三个坐标轴方向上的变量,a、b是常数。 本文将展示几种生成双曲抛物面算法和切图.使用自己定义语法的脚本代码生成数学...

    双曲抛物面又称马鞍面,它在笛卡儿坐标系中的方程为:

    其中x、y、z是平面直角坐标系三个坐标轴方向上的变量,a、b是常数。

    本文将展示几种生成双曲抛物面算法和切图.使用自己定义语法的脚本代码生成数学图形.相关软件参见:数学图形可视化工具,该软件免费开源.QQ交流群: 367752815

    (1)

    vertices = dimension1:64 dimension2:64
    
    x = from (-4) to (4) dimension1
    z = from (-4) to (4) dimension2
    
    y = x*x - z*z

     

    (2)参数方程表示

    #y = x*x/a/a - z*z/b/b
    
    vertices = dimension1:64 dimension2:64
    
    u = from (-3) to (3) dimension1
    v = from (-3) to (3) dimension2
    
    a = rand2(0.5, 2)
    b = rand2(0.5, 2)
    
    x = a*(u + v)
    z = b*(u - v)
    y = 2*u*v

    (3)三角函数表示

    vertices = D1:64 D2:64
    
    u = from (0) to (2*PI) D1
    v = from (0) to (3) D2
    
    a = rand2(0.5, 1)
    
    x = v*sin(u)
    z = v*cos(u)
    y = a*v*v*sin(u*2)

     

    (4)乘法表示

    如果把双曲抛物面

    顺着+z的方向旋转π/4的角度,则方程为:

    如果,则简化为:

    .

    最后,设,我们可以看到双曲抛物面

    .

    与以下的曲面是全等的:

    因此它可以视为乘法表的几何表示。

    vertices = dimension1:64 dimension2:64
    
    x = from (-4) to (4) dimension1
    z = from (-4) to (4) dimension2
    
    y = x*z

     

    转载于:https://my.oschina.net/abcijkxyz/blog/723458

    展开全文
  • 双曲抛物面

    千次阅读 2016-10-21 23:50:48
    x2a2−y2b2=cz \frac{x^2}{a^2}-\frac{y^2}{b^2}=cz 这种方程是不是离实际生活特别远呢?却也不是,比如猜想一下你常常吃到的薯片,

    x2a2y2b2=cz

    这种方程是不是离实际生活特别远呢?却也不是,比如猜想一下你常常吃到的薯片,


    这里写图片描述

    展开全文
  • 35.4 双曲抛物面(马鞍...双曲抛物面方程如下: 35.4.2 看C++代码实现 ---------------------------------------------quadratic_hyperbolic_paraboloid.h ------------------------------------ quadratic_hyper

    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 ----------------------------------

    quadratic_hyperbolic_paraboloid.cpp

     

    #include "quadratic_hyperbolic_paraboloid.h"
    
    #include <iostream>
    using namespace std;
    
    bool quadratic_hyperbolic_paraboloid::hit(const ray& r, float t_min, float t_max, hit_record& rec) const {
            float A = focus_directrix_q*r.direction().x()*r.direction().x()
                    + focus_directrix_p*r.direction().z()*r.direction().z();
            float B = 2*focus_directrix_q*r.direction().x()*(r.origin().x()-center.x())
                    + 2*focus_directrix_p*r.direction().z()*(r.origin().z()-center.z())
                    - 2*focus_directrix_p*focus_directrix_q*r.direction().y();
            float C = focus_directrix_q*(r.origin().x()-center.x())*(r.origin().x()-center.x())
                    + focus_directrix_p*(r.origin().z()-center.z())*(r.origin().z()-center.z())
                    - 2*focus_directrix_p*focus_directrix_q*(r.origin().y()-center.y());
            float temp, temp1, temp2;
            vec3 pc;
    
            if(A == 0) {
                if (B == 0) {
                    return false;
                }
                else {
                    temp = -C/B;
                    if (temp < t_max && temp > t_min) {
                        rec.t = temp;
                        rec.p = r.point_at_parameter(rec.t);
                        if ((((rec.p.y()-center.y()) > -height_half_y) && ((rec.p.y()-center.y()) < height_half_y)) && (((rec.p.x()-center.x()) > -width_x) 
    && ((rec.p.x()-center.x()) < width_x)) ) {
                            pc = rec.p - center;
                            rec.normal = unit_vector(vec3(2*focus_directrix_q*pc.x(), 
    									-2*focus_directrix_p*focus_directrix_q, 
    									2*focus_directrix_p*pc.z()));
                            if (dot(rec.normal, r.direction()) > 0) {
                                rec.normal = -rec.normal;
                            }
                            rec.mat_ptr = ma;
                            return true;
                        }
                        else {
                            return false;
                        }
                    }
                }
            }
            else {
                float discriminant = B*B - 4*A*C;
                if (discriminant >= 0) {
                    temp1 = (-B - sqrt(discriminant)) / (2.0*A);
                    temp2 = (-B + sqrt(discriminant)) / (2.0*A);
                    if (temp1 > temp2) {//make sure that temp1 is smaller than temp2
                        temp = temp1;
                        temp1 = temp2;
                        temp2 = temp;
                    }
                    if (temp1 < t_max && temp1 > t_min) {
                        rec.t = temp1;
                        rec.p = r.point_at_parameter(rec.t);
                        if ((((rec.p.y()-center.y()) > -height_half_y) && ((rec.p.y()-center.y()) < height_half_y)) && (((rec.p.x()-center.x()) > -width_x) && ((rec.p.x()-center.x()) < width_x)) ) {
                            pc = rec.p - center;
                            rec.normal = unit_vector(vec3(2*focus_directrix_q*pc.x(), 
    									-2*focus_directrix_p*focus_directrix_q, 
    									2*focus_directrix_p*pc.z()));
                            if (dot(rec.normal, r.direction()) > 0) {
                                rec.normal = -rec.normal;
                            }
                            rec.mat_ptr = ma;
                            return true;
                        }
                        else {
    //                        return false;
                        }
                    }
                    if (temp2 < t_max && temp2 > t_min) {
                        rec.t = temp2;
                        rec.p = r.point_at_parameter(rec.t);
                        if ((((rec.p.y()-center.y()) > -height_half_y) && ((rec.p.y()-center.y()) < height_half_y)) && (((rec.p.x()-center.x()) > -width_x) && ((rec.p.x()-center.x()) < width_x)) ) {
                            pc = rec.p - center;
                            rec.normal = unit_vector(vec3(2*focus_directrix_q*pc.x(), 
    									-2*focus_directrix_p*focus_directrix_q, 
    									2*focus_directrix_p*pc.z()));
                            if (dot(rec.normal, r.direction()) > 0) {
                                rec.normal = -rec.normal;
                            }
                            rec.mat_ptr = ma;
                            return true;
                        }
                        else {
    //                        return false;
                        }
                    }
                }
                return false;
            }
    }
    

    ----------------------------------------------main.cpp ------------------------------------------

    main.cpp

     

            hitable *list[2];
            list[0] = new sphere(vec3(0.0,-100.5,-1), 100, new lambertian(vec3(0.8, 0.8, 0.0)));
            list[1] = new quadratic_hyperbolic_paraboloid(vec3(0, 1.5, 0), 0.5, 2, 1.5, 2, new lambertian(vec3(0.0, 0.1, 0.5)));
            hitable *world = new hitable_list(list,2);
    
            vec3 lookfrom(2,5,10);
            vec3 lookat(0,1,0);
            float dist_to_focus = (lookfrom - lookat).length();
            float aperture = 0.0;
            camera cam(lookfrom, lookat, vec3(0,1,0), 20, float(nx)/float(ny), aperture, 0.7*dist_to_focus);
    


    输出图片:


    如果改成这样vec3 lookfrom(5,5,10);,图是这样的:


    如果改成这样vec3 lookfrom(10,5,10);,图是这样的:



    展开全文
  • 上一节讲的是双曲抛物面,这节讲与之类似的椭圆抛物面. 抛物面是二次曲面的一种。抛物面有两种:椭圆抛物面和双曲抛物面...双曲抛物面在笛卡儿坐标系中的方程为: 本文将展示几种生成椭圆抛物面算法和切...

    上一节讲的是双曲抛物面,这节讲与之类似的椭圆抛物面.

    抛物面是二次曲面的一种。抛物面有两种:椭圆抛物面双曲抛物面

    椭圆抛物面在笛卡儿坐标系中的方程为:

    双曲抛物面在笛卡儿坐标系中的方程为:

    本文将展示几种生成椭圆抛物面算法和切图.使用自己定义语法的脚本代码生成数学图形.相关软件参见:数学图形可视化工具,该软件免费开源.QQ交流群: 367752815

    (1)参数方程

    #http://www.mathcurve.com/surfaces/alysseid/alysseid.shtml
    
    vertices = D1:100 D2:100
    
    v = from 0 to (PI*2) D1
    u = from 0 to 5 D2
    
    a = 2.0
    
    x = u*cos(v)
    y = 10 - pow(u, a)
    z = u*sin(v)

    (2)普通方程

    vertices = dimension1:101 dimension2:101
    x = from (-100) to (100) dimension1
    z = from (-100) to (100) dimension2
    y = (20000 - x^2 - z^2)*0.005
    
    u = x/10
    v = z/10

    (3)椭圆

    vertices = D1:100 D2:100
    u = from 0 to (2*PI) D1
    v = from 0 to 5 D2
    a = rand2(1, 10)
    b = rand2(1, 10)
    
    x = v*a*cos(u)
    y = v*v/2
    z = v*b*sin(u)

    (4)将抛物线绕中轴旋转生成的椭圆抛物面

    vertices = D1:512 D2:100
    u = from 0 to 5 D1
    v = from 0 to (2*PI) D2
    
    a = rand2(-1, 1)
    
    x = u*cos(v)
    y = a*(u*u - 25)
    z = u*sin(v)
    
    v = v*2

     

    转载于:https://my.oschina.net/abcijkxyz/blog/722691

    展开全文
  • 常见曲面及其方程

    2020-04-25 14:31:37
    常见问题两直线夹角直线与平面的夹角三、常见曲面及其方程球面柱面椭圆柱面双曲柱面旋转曲面圆锥面锥面椭圆锥面椭球面单叶双曲面双叶双曲面椭圆抛物面双曲抛物面/马鞍面旋转抛物面 一、平面及其方程 1. 方程类型 ...
  • 1. 抛物面的标准方程及图形 2. 双曲抛物面的标准方程及图形 3. 单叶双曲面 思考题的图形(关于y轴对称): 思考题图形: ...
  • 参考资料:https://wenku.baidu.com/view/715f1c7b30126edb6f1aff00bed5b9f3f90f72f1.html?from=search点击进入 1.球面 ...5.2双曲抛物面 6.双曲面 6.1单叶双曲面 6.2双叶双曲面 7.椭圆锥面 ...
  • 空间曲面问题的引入曲面及其方程球面方程圆柱面方程圆锥面例4曲面参数方程例5 球面的参数方程例5 圆柱面的参数方程旋转曲面与柱面旋转曲面例6 旋转椭球面例7 旋转双曲面例8 旋转抛物面柱面(准线C,母线L)椭圆柱面、...
  • 二次曲面包括:球面、椭圆球面、单页双曲面、双页双曲面、椭圆锥面、椭圆柱面、椭圆抛物面、双曲抛物面等等。 注意到:只有球面和椭球面是封闭面,其他的都是开放面。 二次曲面是有方程的(我们已经学过的...
  • 12 单叶旋转双曲面 13 旋转锥面 14 旋转抛物面 15 环面 16 椭球面 17 椭圆抛物面 18 双曲抛物面 19 双曲面的渐近锥面 20 单叶双曲面是直纹面 21 双曲抛物面是直纹面 22 一般锥面 23 空间曲线——...
  • 数学中常见的曲面方程及形状

    千次阅读 2020-04-10 23:15:29
    各种曲面的方程及其形状 圆柱 x²+y²=R² 椭圆柱面 x²/a²+y²/b²=1 双曲柱面 x²/a²-y²/b²=1 抛物柱面 x²=2ay或y²=2ax 圆锥面 (x²+y²)/a²-z²/b²=0 球面 (x-a)²+(y-b)²+(z-c)...
  • 圆柱与平面的交线2.2 例32.3 例4 维维安尼曲线3.0 投影柱面与投影曲线3.1 一般方程的投影曲线3.1.1 例5 一般方程求投影曲线方程3.1.2 例6 一般方程求投影曲线方程3.2 例7 条件不等式投影区域4.0 截痕法(很重要)...
  • 第三节 空间的曲面和曲线1.几种常用曲面含有的一个等式或表示空间的曲面,在这里只考虑几种简单的...例如:是准线在内,母线平行于轴的抛物柱面;是准线在内,母线平行于轴的双曲柱面。【例题1-12】在三维空间中...
  • C) 双曲抛物面; D) 圆锥面 ; 答:( )。 2、若函数 在点 附近连续, , , ,则在 处 A)函数 可微分,且 ; B)曲线 的切线对 轴的倾斜角为 ; C)曲线 的切线对 轴的倾斜角为 ; D)曲面 切平面的法向量为 。
  • 论文研究 -

    2020-05-31 13:01:17
    在本文中,基于Lobachevskian(双曲型)静态几何,我们提出了Lobachevskian静态宇宙中CMB的几何模型(作为对CMB的现有大爆炸模型的替代),作为均质的球形空间。 从物理学的角度来看,霍洛球是洛巴切夫斯基空间中的...
  • 微积分辅导zw下.pdf

    2008-12-25 10:58:58
    公元前三世纪,古希腊的阿基米德在研究解决抛物弓形的面积、球和球冠面积、螺线下面积和旋转双曲体的体积的问题中,就隐含着近代积分学的思想。作为微分学基础的极限理论来说,早在古代以有比较清楚的论述。比如我国...

空空如也

空空如也

1 2
收藏数 24
精华内容 9
关键字:

双曲抛物面方程