精华内容
下载资源
问答
  • 几何向量:计算光线反射reflect向量
    万次阅读 多人点赞
    2018-03-07 14:29:14

    这一篇我们来聊一下光线反射的基础计算,看过点叉积篇的小伙伴们肯定注意到底下有一句话,就是“为了以后的光线反射reflect计算”,这里我们就别以后以后了,现在就动起来。

    光线反射是一个非常重要的概念,或者说常识,这里我们来聊一下真实世界。

    现实世界中,我们眼睛之所以看到各种各样的物体,其原因就是太阳发出的光线照射到地球上,然后经过反射后进入人的眼睛,人的眼睛接收到光子后在视网膜上成像,然后通过生物信号传递给大脑,所以人就看到了这个世界。

    这里我们把太阳叫做“光源”,其实我们也有很多人造“光源”,比如电灯,激光等。比如在一间黑暗的屋子,我们打开屋里唯一一盏电灯,瞬间屋子就被照亮,我们的眼睛就能看到屋里的物体。

    ps:这里我们思考一个现象:我们正午站在一片操场上,四目远眺,会发现眼睛能一览无遗操场的各个角落,给人的感觉就是操场四面八方的明亮程度都是一样的。

    但是我们在黑暗的屋子里,就算是打开电灯,举目四望,也会发现屋子里有明有暗,而且是距离电灯越近的越亮,越远的越暗。

    这种现象是为什么呢?

    因为太阳首先是一个超大的发光发热的内部进行着剧烈核聚变的恒星,他发出来的强烈光线到达地球都要八分钟,可见这是一个非常遥远的距离,在这种距离的尺度上,太阳的光线就是无限接近于平行“辐射”过地球一半的表面。

    而黑屋中的一盏灯,光线从那个“小点”四面八方发射出来,因为功率低,光强度低,所以离灯光稍微远一些的地方就照的不太亮了。

    图形学中,定义这两种“光源”,第一种就是平行光,第二种就是点光源。这里我们只是随意的聊一下,让我们有个直观的想象。

    接下来我们进入细分讲解了,积少成多这点我们都知道,就算是大到太阳,小到电灯,他们的“光照”效果都是通过发射“一根一根”乃至“无数根”光线进行作用的。

    ps:在物理上光是具有波粒二象性的,并不是“一根”光线,但是在图形学角度,我们就认为光线就是“一根”的

    这里我们只讨论“一根”光线的行为。

    光线照射在物体上的反射也分为镜面反射和漫反射,打个形象的比喻就是,光线射入比较光滑的平面而反射就是镜面反射,比如镜子。而光线射入比较粗糙的表面进行的乱七八糟的反射(或者说散射)就叫漫反射,比如地面,其实这两种反射有个本质上的相同点,就是遵循光的反射定律。

    物理学家通过观察自然现象,发现一个光的反射定律:假如一根光线从一端射入“理想镜面”,反射光线从另一端射出,那么入射光线和反射光线就会分居在“入射点”为起点的“理想镜面”的法向量N的两侧,而且,入射光线和反射光线分别于法向量N的夹角相等,小伙伴们可以想象一下打台球,白球撞击桌沿的反弹。

    其实漫反射之所以“乱七八糟”,是因为漫反射的平面“凹凸不平”,但是“一根”光线照射在“粗糙平面”上,其实他进行反射的那一个点所在的平面也可以看作一个很“微小的理想镜面”。

    这样就引来这篇的核心问题了,到底反射向量如何计算。

    假设我们有一个发着光的太阳,太阳底下有一个“理想镜面”,如下图:

    这时候我们抽象成数学图来进行反射光的计算,如下图:

    这幅图可以看出,我们计算反射光线OB,则转换成了计算OP,这里OP是AO在法向量N上的投影,接下来我们推导投影向量计算,如下图:

    我们根据点积计算出cosθ,然后通过OA' = |OA|*cosθ*单位法向量n就能得到,向量的投影公式。

    这个时候我们再回过来推导 OB = AO + 2OP的结果,如下图:

    从next:开始,我们就求出了OB = AO - 2(AO·N)·N(ps:第一个AO·N的点积计算出标量m再乘N,为了不引起误解,这里提示一下)。

    这里AO的向量就等于入射点到光源的向量,N就是平面的单位法向量。

    这两个量应该好求,AO就是入射点坐标-光源坐标,N就是求平面的法向量(之前有通过叉积推导)再进行单位化。

    讲到这里了,基本上概念和公式推导都有了,接下来我们就来写一个模拟程序来看看效果,如下图:

    上面我们形象的模拟了光线反射的路径。

    demo下载地址:https://download.csdn.net/download/yinhun2012/10273595

     

     

     

    更多相关内容
  • 作者: 何裕新、孙维刚 出版社: 北京师范学院出版社 出版时间: 1988 装帧: 平装
  • 线性代数与解析几何几何向量PPT学习教案.pptx
  • #资源达人分享计划#
  • 几何向量及线性运算向量积PPT学习教案.pptx
  • 几何向量及线性运算31323向量积PPT学习教案.pptx
  • 本文用与传统体系迥然不同的方法证明了外积的向量法定义与坐标法定义等价。从而介绍了解析几何向量代数部份的两种新体系。
  • 几何向量及线性运算31323向量积26001PPT学习教案.pptx
  • 高考数学中利用空间向量解决立体几何向量方法三PPT课件.pptx
  • 高考数学中利用空间向量解决立体几何向量方法四——在立体几何证明中应用PPT课件.pptx
  • 高考数学中利用空间向量解决立体几何向量方法五——在立体几何中综合应用PPT课件.pptx
  • 立体几何向量法—建系讲义.doc
  • 几何向量:基本概念

    千次阅读 2018-03-01 18:36:04
    前面写完三角函数分类博客,我们具备了基础的三角函数推导能力和知识,接下来就要讲向量几何方面了。但凡买一本讲解向量的书,一开始莫不是讲解笛卡尔的城市建设所采用的坐标系概念,因为几何的英文geometry就有...

    前面写完三角函数分类博客,我们具备了基础的三角函数推导能力和知识,接下来就要讲向量与几何方面了。

    但凡买一本讲解向量的书,一开始莫不是讲解笛卡尔的城市建设所采用的坐标系概念,因为几何的英文geometry就有“地理测量”的意思,据说几何学本来就是为了测量大地的。

    1.下面我们来一些基础的定义:

    ps:“定义”这个词语以后会经常出现,我们都是一些“叛逆”的小青年,就是反感“定义”、“规定”等词语,这些词语给我们的感觉就好像是,不想跟我们解释原因,又强加给我们的概念一样,这里我们缓和一些情绪,来看下“定义”的意思,其实“定义”有两种意思,第一种就是约定俗成,比如1+1=2,我们可以为认为他就是这样的,他本来就该这样,第二中就是,人为的设置一些“定义”,用来辅助理解接下来要表达的意思,比如“定义”盛菜的叫盘子,盛饭的叫碗,拿在手上夹菜的叫筷子,那么我们上餐馆吃饭,就能叫服务员拿多少碗筷而不会导致别人听不明白。

    接下来我们就要来一堆的定义了:

    矢:空间中的一个直线段,当规定其两个端点中一个为起始点,一个位终止点,这个线段就称为一个矢。

    向量:具有同样长度和方向的失的集合称为一个向量,单独的一个矢为向量的一个代表。

    ps:这里要特别注意了,向量是一系列矢的集合,我们来想象一下,平时我们描叙一个向量,在空间xyz坐标系中,画两个点,一个作为起始点P,一个作为终止点Q,连接起始点和终止点,就是一个向量了(假设记作A(a,b,c)),那么向量A(a,b,c)到处移动不改变朝向,也可以说平行移动,那么我们说向量A还是那个向量A,这就很奇怪了,如果到处平行移动,向量A是不变的,那么以后的图形学计算中,难道不会出现很多错误么。

    如果我们想规定一个空间xyz坐标系中的“绝对向量”该怎么办呢,用“绝对坐标”起始点P(x1,y1,z1)和终止点Q(x2,y2,z2)来表示一个“绝对向量”A,这时候假如我们移动了向量A,那么起始点P和终止点Q也跟着平移了,且平移量相同,这时候我们可以反过来说PQ都变成新的坐标点P1Q1,所以向量A也变成了新的向量B,这样就很好的解决了“绝对向量”的问题,不过用两个“绝对坐标点”来表示有点“浪费资源”。

    其实数学上有个齐次坐标的概念,我们想一下,假如我们把向量A(a,b,c)新增一个分量w来表示向量A在空间xyz坐标系中的“具体位置”,是不是一下就解决了这个问题?因为向量A的朝向,长度都确定了,就只有“位置”没确定,假如我们插入一个w去表示“位置”,这样A(a,b,c,w)不就可以表示一个空间中的“绝对向量”了么?而且只多占用“一个资源”。

    齐次坐标后面将线性代数的时候会仔细讲到而且实际测试程序中的应用。

    接下来实际看一下什么是向量,如下图:


    可以看出,在二维和三维坐标系中,向量就是两个坐标点收尾相连。


    2.向量相加

    数学上我们规定向量相加,使用平行四边形法则,如下图:


    我们将向量a,b做平行线组成平行四边形,那么对角线c就是a+b组成的向量,我们记作a+b= c

    ps:这里连我都要挑刺了,为何a+b = c就要做平行四边形?是谁规定的?强制规定我们可不干!

    这里就来解释他的来由:

    为什么会有数学?其实数学是前人为了研究自然万物的物理现象而产生的工具,向量的加法我们可以通过一个现象来表现,

    假如我们坐在一条船上,船正要通过一条河到达对岸,但是河水是很湍急的,那么在船的动力和河水的动力驱使下,船的行进路线会是怎么样的呢?

    这里我们可以分解出两个向量来处理,向量A为船在理想状态下依靠自身动力行进的线路(就是河两岸的距离),向量B是船在行进时间中(t = A/船的速度),被水流横向推动的距离(t * 水流推船的速度),这样我们就能得到最终船行进的线路向量c,如下图:


    这个应该很好理解,A就是两岸的距离,B就是行进过程中被水推的距离,那么C就是实际上船的运行线路了

    向量的加法其实际代表的现实中的意义就在于此。

    当然,我们可以用纯数学来论证向量加法的正确性,如下图:


    上图我们建立直角坐标系和向量oP2(x2,y2),oP(x1,y1),那么我们继续建立oQ(x1+x2,y1+y2),通过推算,我们可以看出oP2 Q P为平行四边形,所以说平行四边形对角线就是向量和。


    3.向量相减

    向量相减a-b其实我们可以看作a+(-b),b与-b的关系我们可以看作是反向的

    假如说河水的流向相反了,那么船就向左偏移了,这个应该很好理解。


    4.向量分配律

    γ(a+b) = γa+γb

    分配律在数学上很好证明,因为x为标量数值,所以建立直角坐标系时候x和y分量乘上γ就能证明了,如下图:


    物理上的意义也很好解释:

    比如两辆车从一个斜坡上开下来,一个速度是V,一个速度是2V,那么一段时间后他们分别跑了S和2S的山坡距离,如下图:


    很方便就看出其中的“等比性”了





    展开全文
  • 高中数学立体几何向量法归纳PPT课件.pptx
  • 大数据-算法-Finsler流形上的若干曲率性质和几何向量场.pdf
  • 几何向量:向量乘法(叉乘)

    千次阅读 2018-03-05 18:38:24
    紧接上一篇:http://blog.csdn.net/yinhun2012/article/details/79425674之前我们学习了物理意义上的做功,也就是数学中向量点积的实际意义,这一篇我们学习物理上另外一种力的作用,也就是力矩。物理上定义力矩是力...

    紧接上一篇:http://blog.csdn.net/yinhun2012/article/details/79425674

    之前我们学习了物理意义上的做功,也就是数学中向量点积的实际意义,这一篇我们学习物理上另外一种力的作用,也就是力矩。

    物理上定义力矩是力对物体产生转动作用的物理量,这里我们想象一下现实中的力矩现象,比如陀螺,老式摇动柴油发动机,打隧道用的隧道机械都有力矩在其中。

    这里我们看一下老式柴油发动机的摇把,如下图:


    手对摇把产生OA的半径圆的切线方面力F摇动,那么会产生一种沿着Z轴的力矩L,物理上把求力矩L定义为力F 乘 力臂OA,既:L = F*OA。

    这里力矩L可以看作一个和Z轴重合的向量,力矩L的数量值等于力F作用的那一刻(那一瞬间,后面我们在微分中会讲解一瞬的意义)与力臂OA组成的平行四边形(特殊情况下比如F为切线就是矩形)的面积,上图中力M就是普通情况,求AM'和MG的乘积救得到力矩的向量的模长。

    扯了这么多,其实就是阐述力矩的这种定义,数学上我们把计算力矩称为计算叉积,接下来我们继续观察叉积的几何意义。

    我们同样建立空间xyz坐标系,如下图:


    向量OA和AB的叉积OC,OC的属性包括两个

    ①OC垂直于OA,AB所在的平面(不共线三点确定一个平面)

    ②OC的向量模长等于OA,AB组成的平行四边形的面积

    接下来就要思考怎么计算OC这个向量了,为了直观些,我们继续看下图:


    够形象吧,OC这个“力矩”垂直于OB且垂直于OA①,而且模长等于|OA|*|OB|*sin∠BOA②,如下图:


    由①我们推算出OC的Z代数坐标分量,那么此时问题就变换成求Z分量了,如下图:


    这里我们用xyz基坐标两两的叉积等第三轴的基坐标,这种特殊形式推出OC中z值。

    下面我们用程序验证一下,如图:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class CrossMathFunc : MonoBehaviour {
    
        public Transform aHead;
        public Transform aTail;
        public Transform bHead;
        public Transform bTail;
    
        void Start()
        {
            //A (a1,a2,a3)
            Vector3 A = aTail.position - aHead.position; 
            //B (b1,b2,b3)
            Vector3 B = bTail.position - bHead.position;
            //用推导公式计算
            Vector3 crossAB = new Vector3(A.y*B.z-A.z*B.y, A.z * B.x - A.x * B.z, A.x * B.y - A.y * B.x);
    
            //用api计算
            Vector3 apicrossAB = Vector3.Cross(A, B);
    #if UNITY_EDITOR
            Debug.LogFormat("crossAB = {0} apicrossAB = {1}", crossAB, apicrossAB);
    #endif
        }
    }


    上面我们介绍了向量叉积的含义和推导过程,接下来看下两个向量叉积比较形象的示意图,如下:


    可以看出按照规定的逆时针旋转,两向量夹角在0-180°时叉积向量N“向上”,夹角在180-360°时叉积向量N“向下”。

    这个所谓的“向上”和“向下”是一个相对概念,假如我们使用左手坐标系,如下图:


    那么向上就是沿着Y轴正方向,向下就是负方向了。

    叉积在图形学中应用主要是计算法向量,因为图形学中经常会出现光线反射的问题,叉积提供了我们计算法向量的方法,后面我们继续推导光线反射。





    展开全文
  • 向量与空间解析几何思维导图
  • ACM 计算几何向量

    2017-07-21 15:23:07
    向量 简介注意事项基本计算 加减法 ~ 示例代码长度 ~ 示例代码数乘 ~ 示例代码点积 ...在计算几何中,从指向的向量记作。维向量可以用个实数来表示。向量的基本运算包括加减法、数乘、

    向量

    简介

    向量,又称矢量,是既有大小又有方向的量,向量的长度即向量的大小称为向量的模。在计算几何中,从指向的向量记作维向量可以用个实数来表示。向量的基本运算包括加减法、数乘、点积、叉积和混合积。使用向量这一个基本的数据结构,我们可以用向量表示点和更复杂的各种图形。

    注意事项

    我们一般用一个二维向量来表示点。注意,在有些计算几何相关的题目中,坐标是可以利用整形储存的。在做这样的题目时,坐标一定要用整形变量储存,否则精度上容易出错。具体的将点的坐标用整形变量储存可以需要使用一些技巧,比如计算中计算平方或将坐标扩大二倍等方式。

    // Pt是Point的缩写
    struct Pt {
        double x, y;
        Pt() { }
        Pt(double x, double y) : x(x), y(y) { }
    };
    
    double norm(Pt p) { return sqrt(p.x*p.x + p.y*p.y); }
    double dist (Pt a, Pt b) { return (a-b).norm(); }
    void print(Pt p) { printf("(%f, %f)", p.x, p.y); }
    

    基本计算

    加减法

    向量的加减法遵从平行四边形法则和三角形法则。

    示例代码
    Pt operator - (Pt a, Pt b) { return Pt(a.x - b.x, a.y - b.y); }
    Pt operator + (Pt a, Pt b) { return Pt(a.x + b.x, a.y + b.y); }
    

    长度

    向量的长度是

    示例代码
    double len(Pt p) { return sqrt(sqr(p.x)+sqr(p.y)); }
    

    数乘

    向量的数乘是一个向量和实数的运算。如果是零,那么结果是一个零向量,如果是一个负数,那么结果向量会改变方向。

    示例代码
    Pt operator * (double A, Pt p) { return Pt(p.x*A, p.y*A); }
    Pt operator * (Pt p, double A) { return Pt(p.x*A, p.y*A); }
    

    点积

    又称内积。

    ,其中的夹角。

    应用

    点积可以用来计算两向量的夹角。

    示例代码
    double dot(Pt a, Pt b) { return a.x * b.x + a.y * b.y; }
    

    叉积

    叉积又称外积。叉积运算得到的是一个向量,它的大小是所构成的平行四边形的面积,方向与所在平面垂直,成右手系。

    设两向量,它们在二维平面上的的叉积为:

    示例代码
    double det(Pt a, Pt b) { return a.x * b.y - a.y * b.x; }
    

    性质与应用

    叉积拥有两个重要的性质——面积与方向。

    两向量叉积得到新向量的长度为这两个所构成的平行四边形的面积,利用这个性质我们可以求三角形的面积。

    两向量叉积能反映出两向量方向的信息。如果的符号为正,那么的逆时针方向;如果符号为负,那么的顺时针方向;如果结果为零的话,那么共线。

    计算结果的方向
    的逆时针方向
    共线
    的顺时针方向

    经典题目

    • ZOJ 1010 Area

    向量旋转

    操作目的

    将向量绕原点逆时针旋转度。

    模板代码

    Pt rotate(Pt p, double a) {
        return Pt(p.x*cos(a) - p.y*sin(a), p.x*sin(a) + p.y*cos(a));
    }
    展开全文
  • 几何向量:计算光线折射refract向量

    千次阅读 2018-03-08 11:03:25
    通过标量推导出向量的模长,然后通过向量平行和同异方向推导出向量,推出OB = OD + DB = -|cosβ|*OE + |sinβ/sinθ|*(AO + |cosθ|* OE),推导到这里,我们就把OB的公式用cos sin以及入射光向量AO和介质法向量N...
  • 数量积:a·b = |a||b|cos(a,b)= a1b1+a2b2+a3b3,两个向量的数量积是一个数 两个向量平行充分必要条件:a //b <=>a = kb 或a //b <=>axb = 0; 叉乘 向量积:a x b ==(a2b3 - a3b2,...
  • 几何向量:向量乘法(点乘)

    千次阅读 2019-02-03 16:23:12
    上一篇讲了向量的加减分配等计算,那么紧接着就是应该来讲乘除了吧,我们知道普通数值都有加减乘除开方等等计算,比如:10x10 = 100&nbsp;&nbsp;10÷10 = 1那么向量AxB = ?&nbsp; A÷B = ?&nbsp;...
  • 问题:假设我们世界空间中有一个任意三角形,且已知三角形各个顶点ABC的坐标,求三角形的外心P和外心所在的法向量n,如下图: 如果依稀还记得初中几何,就知道一个平面三角形外心计算规则:三角形任意两边的中垂线...
  • 解释全面 思路清晰,内容完整,原创! 最完整的,最易懂的 PPT
  • 几何向量:三维点与直线

    千次阅读 2019-07-30 20:17:22
    在三维图形问题中,点和直线计算是很常见的,比如,... 学到现在的几何向量,一眼就看得出来,只需要根据向量PC1与向量PV的点积等于0,得到方程组就可以最终计算出P点坐标了。首先我们确定三维空间中P点表示法,使...
  • 向量几何

    2016-04-28 09:13:32
    向量几何 sf2gis@163.com 2016年3月30日   1 目标:研究物体的位置、移动等空间相关关系 2 原理:使用带有方向的量表示空间中的物体,并研究其关系。 带有方向的量,称为向量(矢量、Vector)。 方向:使用...
  • Shp文件的几何向量在Osg中转换及轮廓提取   我们常常会碰到存储有几何向量Shp文件,或是GIS地形文件相对应的的shp文件,那么怎么利用这些Shp 中的几何特征对象呢? 一、Shp文件的转换为几何体对象OSG对象  ...
  • 高等数学-空间解析几何向量代数

    千次阅读 2019-07-11 16:51:27
    1,向量的概念 1.1 一般在数学上只研究与起点无关的向量(自由向量),即只考虑向量的大小和方向。 1.2 向量的大小叫做向量的模。 1.3 非零向量r⃗与三条坐标轴的夹角α,β,γ称为向量r⃗的方向角。非零向量\vec r与...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 72,025
精华内容 28,810
关键字:

几何向量