反射向量 及 向量投影

求反射向量

在图形学中,计算光照模型时,经常需要求取反射向量,一般的shader函数库都提供计算反射向量的方法,下面介绍一下如何手动计算反射向量。

给定入射光线向量I和平面法向量N,求反射向量R,如下图。为了方便计算,这里假定I和N都是单位向量(模为1,编程时可先将I和N单位化)

方法一

设入射光线向量I和反射平面的法向量N之间的夹角为theta。连接I的始端和R的末端,则有

R = 2P - I              (1)

现在问题变成了如何求取P,设入射点0到P与N的交点的向量为S,那么有

P = I + S               (2)

现在问题变成了如何求取向量S,向量S即向量-N(注意,这里是-N,因为S和N的方向相反。)在向量N上的投影,根据向量的投影公式有

因为N是单位向量,简化一下得到

将S代入公式(2),再将P代入公式(1)得到

方法二

将R平移一下,与向量N的延长线相交。

由于入射角和反射角相等,且I和R的长度也相等,所以三角形ION是等腰三角形。故有

ON = 2S

所以有

R = I + 2S

而S是-I在N上的投影,所以有

由于N是单位向量,简化一下得到

所以

貌似方法二更直观些。

向量投影

给定一个向量u和v,求u在v上的投影向量,如下图。

假设u在v上的投影向量是u’,且向量u和v的夹角为theta。一个向量有两个属性,大小和方向,我们先确定u’的大小(即长度,或者模),从u的末端做v的垂线,那么d就是u’的长度。而u’和v的方向是相同的,v的方向v/|v|也就是u’的方向。所以有

                          (1)

再求d的长度。

                      (2)

最后求cos(theta)

                   (3)

联合求解方程(1)(2)(3)得到

这就是最终的投影向量。

而这个向量的长度d是

============================

以下是旧的推导,也保留。

时间: 2024-08-26 13:23:06

反射向量 及 向量投影的相关文章

R简单算术操作符<函数和+-*/>,缺失值,正则向量,向量运算<索引>(二)

赋值操作 x <- c(1,2,3); x = c(1,2,3); c(1,2,3) -> x; assign("x", c(1,2,3)); 这四种形式在大部分时候都能达到一致的效果.推荐使用第一种 1:向量的定义 一串有序数值构成的数值向量(vector) ,创建一个向量我们使用c(num1,num2,num3); 在 R 环境里面,单个的数值也是被看作长度为1的向量. 1.1 向量的基本运算 在算术表达式中使用向量将会对该向量的每一个元素都进行同样算术运算.出现 在同

sdut 2603:Rescue The Princess(第四届山东省省赛原题,计算几何,向量旋转 + 向量交点)

Rescue The Princess Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 Several days ago, a beast caught a beautiful princess and the princess was put in prison. To rescue the princess, a prince who wanted to marry the princess set out immedia

向量及向量运算

定比分点公式(向量P1P=λ?向量PP2) :设P1.P2是直线L上的两点,P是L上不同于P1.P2的任意一点.则存在一个实数 λ,使 向量P1P=λ?向量PP2,λ叫做点P分有向线段P1P2所成的比.   若P1(x1,y1),P2(x2,y2),P(x,y),则有 OP=(OP1+λOP2)(1+λ):(定比分点向量公式)   x=(x1+λx2)/(1+λ),   y=(y1+λy2)/(1+λ).(定比分点坐标公式)    三点共线定理 :若OC=λOA +μOB ,且λ+μ=1 ,则A

[您有新的未分配科技点]计算几何入门(1):点,向量以及向量的简单应用

在打了一阵数据结构之后,老师表示"今天晚上让学长给你们讲一下计算几何"--然后就死了.jpg 昨天晚上一直在推数学的式子以及回顾讲课的笔记--计算几何特点就是多而杂,即使是入门部分也是如此-- 首先,我们从二维的几何问题开始处理. 我们知道,高中解析几何计算几何的基础是向量(Vector)和点(Point),所以我们先来表示这两个概念: 在计算几何中,点和向量一般用结构体来存储,像这样: 1 struct Point 2 { 3 double x,y,rad; 4 Point(doub

第五章:向量运算

第1节:零向量 1.零向量的概念 对于任意向量x,都有x+y=x,则x被称为零向量.例如,3D零向量为[0 0 0].零向量非常特殊,因为它是唯一大小为零的向量,并且唯一一个没有方向的向量. 第2节:负向量 1.负向量的概念 对于向量x,如果x+(-x)=0,则-x就是负向量. 2.负向量的运算法则 将此法则应用到2D,3D,4D中,则 -[x y] = [-x -y] -[x y z] = [-x -y -z] -[w x y z] = [-w -x -y -z] 3.负向量的几何解释 向量为

一种另类的计算向量旋转公式(复杂慎用)

一般来说,我们解决向量旋转问题一般要么是用旋转矩阵,要么是用四元数.但很早以前我从网上找了一种比较另类的函数,当时也没有深究.最近又把这个函数拿出看看,仔细一琢磨,发现真的很另类.这里分享一下,就当是扩展一下思维.我给这种方法起个名字——向量累加法. 这个方法的公式是这样的,P'=P·cosθ + (A×P)sinθ +A(A·P)(1 - cosθ).这种公式任谁第一眼看到都会摸不着头脑,我们首先来将公式换一个写法: 图1 这个公式中|A|=1.为什么这样变换呢?因为P'正好是三个向量相加,后

向量与矩阵

*/--> 向量与矩阵 Table of Contents 1. 前言 2. 向量运算 2.1. 向量概述 2.2. 向量相加 2.3. 点积 dot product 2.3.1. 说明 2.3.2. 应用 2.3.3. 投影举例 2.4. 叉积 cross product 2.4.1. 说明 2.4.2. 应用 3. 矩阵 4. ref: 4.1. berkeley computer graphics resources 1 前言 本文主要会叙述向量和矩阵基本的数学运算及在图形学中的简单运用.

Unity 中的 Vector向量的 相关使用1

Unity 中的 Vector向量的 相关使用1 孙广东 2015.10.28 以下页面提供有关在您的代码中有效地使用向量的一些建议. 理解向量算法 向量算术是 3D 图形. 物理和动画的基础,深度的理解它是有用的.下面是主要的操作和一些建议,它们可以用于许多的事的说明. 当两个向量相加时,结果是相当于以原始向量为"步骤",一个接一个.请注意这两个参数的顺序并不重要,因为结果是相同的无论哪种方式. 如果第一个向量作为空间中的点然后第二个可以被解释为一个偏移量,或者从这一个位置"

【转】SVN需要补充的向量知识

这篇转过来的博文,将SVN需要补充的数学基础知识娓娓道来,浅显易懂,强烈推荐! 2.从向量到距离计算 SVM = Support Vector Machine,我们在Support Vector Machine中, 看到这个单词-vector(向量).是的,SVM中的大量计算都是建立在向量基础上的,所以这篇做一个简短的知识回顾,会涉及到的内容包括: 向量是什么 它的模长 它的方向 如何加减向量 什么是点积 如何将一个向量映射到另一个向量上 超平面的方程是什么 如何计算间隔 2.1 什么是向量 如