首先先从Bezier说起:

一条直线上有两个端点,P0和P1,那么直线可以写成 y = kx+b ,其实也就是P(t) = (1-t)P0 + P1 (这是个插值函数),(小注,我时常把这两个东西系数写反,其实代入0和1就不会弄错了)T的值范围定义为[0,1]的话,就是这线段上所有的点了(集合)

当然P是(x,y)或(x,y,z)是向量,(1-t)和t是权(高中时候和另外一个同学被椭圆和直线之类的题目折磨的痛不欲生,后来发现了公式,不过自己忘了,反正很有意思的,快速求解数学题目…..)

两个点可以定义一条直线,曲线是什么了,利用微积分的思想,曲线是无穷直线的集合.如何通过几个点,给上0-1的参数求出位于这条曲线上的其他点了?还是老办法,插值.Paul De Casteliau发明了插值方法,是三个点的,加速有P1,P2,P3三点,一方面,我们希望这三个点都应该影响插值后点,但是上面那个式子只是两个点的,于是我们两两求点,然后对中间结果再做插值是再显然不过的了

Temp1 = (1-t)P0+tP1 Temp2 = (1-t)P1+tP2 然后result = (1-t)Temp1 + t Temp2,这是一种很自然的想法,化简下这个式子,把P0,P1,P2整合到同一个式子中:

P(t) = (1-t)^2 P0 + 2t(1-t) P1 + t^2 P2

    这是三个点,很显然的,我们可以以此类推,四个点,五个点,系数就是杨辉三角系数,或者C(m,n) ,(a+b)^n a是(1-t) ,b是t ,n是点数-1

    (WORD文档不会输入公式,懒得从网上找图,n阶的就不写了)

    然后代入t从0到1,生成了一系列的点,结果非常之好啊,如下图:

    

    这东西就是Bezier曲线,这东西有个非常好的特性,假设我们要做对这曲线仿射变换(具体概念请搜索) ,那么有两种方案

        第一种,变换原来的点,然后再来进行插值计算

        第二种,变换插值计算后的点(数量变多了)

    第一种是可行的,因为Bezier的特性保证了,具体证明可代入计算(代入证明即可)

 

    前文已经说过,这只是一种很自然的想法,当然,还有别的插值方法 比如说我们可以利用系数的导数,这也是可行的!

        学过高数忘得不太惨的同学,一定能记得求导(微分)出来就是切向量()

        P(t)' = d/dt()(P(t)) ,当t=0和1时,分别是P0和P1的切向量(Bezier曲线的切向量)

        假设有四个控制点的话,那么

        P(0)' = 3(P1-P0)

        P(1)' = 3(P3-P2)

    我们可以利用这个导数(斜率不是吗) P1和P2可以分别通过P0和P3球

    当然,这样球出来的曲线和Bezier曲线是一样的,只是式子不同(最终化简还是一样的)

    最关键的是,我们可以自己选择 切向量的求法,比如说用Pi-1和Pi+1之间定义Pi处的切向量

    同理,还有Bezier表面,(四个点) 在横向上求两次插值,然后对这两次插值的结果求插值(注意,这里有两个系数,横向用系数u,纵向用系数v)

    同理,可以扩展为3X3的点4X4的点

    前文已经说完,让我们进入正文,三角形怎么进行插值?系数又有几个了,有一种很自然的思维方式同样存在(重心坐标系)

        P = uA+vB+wC;     (u+v+w=1) (u,v,w为对应面积比(http://www.cnblogs.com/leohawke/archive/2014/03/08.html 此文已讨论重心坐标)

    当定义非共面的三角形时,增加三个点即可(二阶) 三阶为下图这种, 三角形中也存在控制点

        

    PN三角形(point-normal) 是采用Bezier三角形,加上了法线的考虑(来球控制点).假设三角形有三个点(每个点有自己的法线,通过球平均而来,所以可能是不同的)

        假设改变上有一点P21 = 2/3 A + 1/3B 即在AB的1/3处,然后将P21投影至A处的切平面(A有切线Na),就可以得到一个控制点P210

        切平面垂直于A点,且沿着Na 投影,其实也就是将向量 B-A/3 投影至Na上,我们可以得到投影长度,然后变可以得到在Na上的那部分

        为什么要减,我是不清楚的(如图)

        

    图上成的钝角,我们可以设V21 = - (Na*(B-A)/3)Na (钝角乘出来是负的,反之) ,于是控制点

        P210 = P21+V21(P21 = 2/3 A + 1/3B)

    还有一个控制点,系数自然是2/3,只不过法线是B的法线(更靠近B),同理可以新增加6个点.中间那个点就等于(所有新生成的点相加除以4 减掉 原来的除以6)

        设V = A+B+C/3

        设E = P210+P120+…./6 中心点P111 = E+ (E-V)/2

    P下标的含义很有意思,就是Bezie三次曲线对应的幂 http://www.cnblogs.com/mikewolf2002/archive/2012/08/21/2648421.html 具体代码参加此文

    构造法线并没有使用三阶公式,过于复杂,于是只需要生成三个新法线,对点和法线使用同样的参数进行插值就行了

    生成控制法线用原来的平均值是个不错的想法,不过有时会造成错误.比如下图:

    正确的法线应该是斜的才对,

    我们可以求 P1和P2的法线(存在这样一个平面 Np = Norm(P1-P2) )然后将平均法线 视为一个入射光,法线是Np(入射平面是P1和P2所成平面)求出反射向量,即是我们要求得控制法线了

    至于求反射,HLSL提供了内置函数

PN-Traniger的更多相关文章

  1. PN结的单向导电性及PN结的电流方程及PN结电容

    PN结加正向电压 当PN结外加正向电压时,外电场将多数载流子推向空间电荷区,使其变窄,削弱了内电场,破坏了原来的平衡,使扩散运动加剧,PN结导通.PN结的压降只有零点几付,所以在其回路里应串联一个电阻 ...

  2. PN结的形成

    P型半导体 在纯净的硅晶体中掺入3价元素如硼,使之取代晶格中硅原子的位置,就形成了P型半导体.在P型半导体中,空穴为多字,自由电子为少子,主要靠空穴导电.掺入的杂质越多,空穴的浓度就越大,导电性就越强 ...

  3. PN结加正向偏置电压 其空间电荷区为何变窄

    理论基础:导体是内部具有较多可以自由移动的电荷的物体. 绝缘体是内部没有或者有很少可以自由移动的电荷的物体. +代表空穴带正电 -代表电子带负电 两竖线之间表示无自由移动电子或空穴部分,相当于绝缘体 ...

  4. AET PN结

    电场方向 电场方向和正电荷受力方向相同 飘移运动和扩散运动 多子和电场方向互相抵制,而多子是扩散运动,而对少子则是促进作用,当扩散和漂移达到动态平衡时,我们称PN结形成 PN结特性 单项导电性

  5. 非常有助于理解二极管PN结原理的资料

    https://www.zhihu.com/question/60053574/answer/174137061 我理解的半导体 pn 结的原理,哪里错了? https://blog.csdn.net ...

  6. Centos7.4使用SoftEther搭建V.PN

    参考: https://blog.csdn.net/qq_39591494/article/details/78625394?locationNum=9&fps=1 https://www.b ...

  7. PN结讲解

    可能大家在使用半导体器件的时候只是在使用它的电气属性,并没有很好的关心下它是什么原因才有了这样的电气属性,那么我们本篇就从物理结构分析下PN结吧. 首先看一张比较陈旧的图图: (就按自己的笔记简单谈谈 ...

  8. 二级管工作原理(PN结原理)学习

    0.小叙闲言 前面已经写了两篇介绍放大器应用和MOSFET作驱动的文章:常规放大电路和差分放大电路和MOSFET使用与H桥驱动问题.但是对它们的工作原理并没有进一步研究一下,今天写下这篇文章,主要是介 ...

  9. HDU.2147 kiki's game (博弈论 PN分析)

    HDU.2147 kiki's game (博弈论 PN分析) 题意分析 简单的PN分析 博弈论快速入门 代码总览 #include <bits/stdc++.h> using names ...

  10. 免費域名申請.me .im .in .co .la .do .ms .kz .tk .ru .mu .pn .tt

    免費申請域名 .la .la 域名 – 原先是ICANN分配給老撾的國家頂級域名,不過後來被同時作為了美國洛杉矶市的域名後綴. 免費申請地址: http://www.idv.la http://www ...

随机推荐

  1. HDU 5858 Hard problem (数学推导)

    Hard problem 题目链接: http://acm.split.hdu.edu.cn/showproblem.php?pid=5858 Description cjj is fun with ...

  2. unigui TUniTreeView demo

    unit untTree; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, For ...

  3. mysql慢查询Slow Query Log和未使用索引(Not Using Indexes)查询配置和使用

    mysql的“慢查询”指的是超过了允许的最大查询时间(long_query_time)的sql语句,而“未使用索引”查询顾名思义就是查询语句没有使用到索引的sql语句. 慢查询配置和使用 在msyql ...

  4. NSString 截取字符串

    NSString字符串常用方法2010-09-06 14:18/******************************************************************** ...

  5. HDU 4539郑厂长系列故事――排兵布阵(状压DP)

    HDU 4539  郑厂长系列故事――排兵布阵 基础的状压DP,首先记录先每一行可取的所哟状态(一行里互不冲突的大概160个状态), 直接套了一个4重循环居然没超时我就呵呵了 //#pragma co ...

  6. UVA 11983 Weird Advertisement(线段树求矩形并的面积)

    UVA 11983 题目大意是说给你N个矩形,让你求被覆盖k次以上的点的总个数(x,y<1e9) 首先这个题有一个转化,吧每个矩形的x2,y2+1这样就转化为了求N个矩形被覆盖k次以上的区域的面 ...

  7. hdoj 5391 Zball in Tina Town

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5391 相关数论结论: 威尔逊定理——当且仅当p为素数时:( p -1 )! ≡ p-1 ( mod p ...

  8. 前端MVC学习总结(三)——AngularJS服务、路由、内置API、jQueryLite

    一.服务 AngularJS功能最基本的组件之一是服务(Service).服务为你的应用提供基于任务的功能.服务可以被视为重复使用的执行一个或多个相关任务的代码块. AngularJS服务是单例对象, ...

  9. JPBM4.4基础及数据库说明

    JPBM4.4基础及数据库说明 对jBPM4.4数据库的几张表简单介绍: A.资源库和运行时表结构 JBPM4_DEPLOYMENT   流程定义表                           ...

  10. IAR EWARM Argument variables $PROJ_DIR$ $TOOLKIT_DIR$

    在IAR中的help中输入argument variables时会找到这样的一个列表: Argument variables On many of the pages in the Options d ...