首页 > 其他分享 >11 Geometry(Curves and Surface)

11 Geometry(Curves and Surface)

时间:2023-04-15 17:46:53浏览次数:56  
标签:11 Bezier Geometry 曲线 贝塞尔 Surface 切线 控制点 Curves

关键点

  • Bezier Curves
  • Bezier Surfaces

1. Bezier Curves 贝塞尔曲线

用一系列的控制点定义一个曲线,并且定义了一系列控制。
如下定义起止点为p0、p3,且定义起始切线,则绘制出一条曲线。

1.1 de Casteljau Alogrithm

  • Three input points
    定义一个时间t,然后取b0b1与b1b2的相应比例位置,得到b01b11,然后对其按t划分得到b02,则为贝塞尔曲线在t时刻的位置。
  • Four input points
    同样在三个直线上找到分割点,然后对分割点得到的两个直线在做分割,最后在这个线段上分割,得到t时刻位置。

1.2 Algebraic Formula

de Casteljau Alogrithm是在对每层控制点做线性插值。

可见贝塞尔曲线上的点是所有控制点的线性组合。

可见系数是(s+t)^n的展开式,即Bernstein form伯恩斯坦多项式。此外,三维空间一样适用。

1.3 性质

  • 起止点确定
  • 起止点切线确定(系数取决于点数-1)
  • 仿射变换与贝塞尔曲线可以交换顺序(投影不可以)
  • 凸包性质:贝塞尔曲线的点一定在给定控制点的凸包内(凸包指包含给定点的最小凸多边形)。

1.4 Piecewise Berzier Curves 逐段贝塞尔曲线

当控制点增多时,不容易画出贝塞尔曲线,因此考虑到是用少量控制点画出贝塞尔曲线的一段,一般每四个控制点画一段,且各段之间首尾相接,即Piecewise cubic Verzier。为了保证各段之间几何连续且切线连续,要求首尾导数大小方向一致。

  • C0连续:首尾相接
  • C1连续:切线一直

1.5 其他曲线

1.5.1 Spline 样条

  • B-spline(basis spline)具有局部性,即改变控制点只会影响局部范围。

2. Bezier Surfaces

  • 使用4x4共16个点,分别对4行得到Berzier Curves,然后对对应水平时刻t的四个点再做贝塞尔曲线,得到曲面。
  • 使用最广泛的还是mesh网格。

来源

[1]Games101. 闫令琪

标签:11,Bezier,Geometry,曲线,贝塞尔,Surface,切线,控制点,Curves
From: https://www.cnblogs.com/etherovo/p/17321451.html

相关文章

  • 10 Geometry(Introduction)
    关键点ImplicityGeometryAlgebraicSurfaceContructiveSolidGeometry(CSG)DistanceFunctionsExplicityGeometryPointCloudPolygonMesh1.RepresentGeometry1.1ImplicitGeometry隐式几何不说明点的位置,而是给出点的关系,得到一个点的集合,即一个几何的表示。......
  • 「解题报告」CF1129D Isolation
    水题,但是调了好久qwq显然是DP,出现次数显然分块,那就数据结构优化DP呗。我们可以维护出当前点到每个点这段区间内有多少个出现次数为\(1\)的数,这个右端点每拓展一位修改的左端点一定是连续的区间。分块维护这个东西,如果是散块暴力重构暴力加,如果是整块那给整块打个加标记。......
  • auto C++11
    类成员或结构体成员也不可以定义为auto。auto作为函数返回值,需要注意的点:当函数使用多条判断语句时,可能有多条return语句,此时所有语句的返回类型必须一致,否则auto会报错。当函数没有return语句时,auto会被推导为void。如果声明和实现分离了,则不能声明为auto。比如:au......
  • LeetCode 115. 不同的子序列
    classSolution{public:longlongf[1010][1010];//f[i][j]表示s前i个字符得到t前j个字符的所有方案intnumDistinct(strings,stringt){f[0][0]=1;intn=s.size(),m=t.size();s=''+s;t=''+t;for(inti=1;i<=n;i+......
  • 如何在WPF中调用Windows 10/11 API(UWP/WinRT)
    最近在github上看到一个音乐播放器项目,dopamine(项目地址:https://github.com/digimezzo/dopamine-windows.git)在编译时,提示有一个库找不到  找了好一会,才发现这是调用了UWP的库。在最初Windows8出来时,这一套新的运行时叫WindowsRT,后面到Windows10时,改成了UWP。因为......
  • 牛客练习110-D
    题目链接:https://ac.nowcoder.com/acm/contest/54129/D比赛的时候dp状态方程想错了,一直在做无用攻。思路:设\(dp[i]\)为用了i次魔法的期望值,递推地做即可。代码:#include<bits/stdc++.h>usingnamespacestd;constintmod=1e9+7;map<char,int>M;longlongqmod(longlong......
  • 华为H12-811题库解析
    骨干区域内的路由器有其它所有区域的完整链路状态信息。A、对B、错试题答案:A试题解析:为了适应大型的网络,OSPF在AS内划分多个区域,每个OSPF路由器只维护所在区域的完整链路状态信息。骨干区域Area0负责区域间路由信息传播(路由信息:LSA[链路状态通告]),因此骨干区域内的路由器有其......
  • w11配置子系统
    笔记软件在2023/4/159:53:19推送该笔记安装docker参考1dockerrun--rm-it--gpusallyyelder/mypython-env:v2/bin/bash下载安装子系统(CUDA)参考2开启适用于Linux的Windows子系统开启Hyper-Vwsl_update_x64下载记得更新#cudaexportLD_LIBRARY_PATH=/usr/local/cu......
  • [Educational Codeforces Round 118 (Rated for Div. 2)]题解
    A题意:给定两个数,每一个数有两个属性,第一个属性是p1,第二个属性是p2.表示这个数有p2个后缀0.这个数本身等于p1后面加p2个0.问给你两个这种数,判断大小。思路:赛场上想到的:如果最终的长度不一样,可以直接根据长度判断。如果相等,就把后缀0加上直接比较大小就可以(比较字典序的大小),但......
  • Educational Codeforces Round 110 (Rated for Div. 2) C. Unstable String(状态机)
    https://codeforces.com/contest/1535/problem/C题目大意:给定一个字符串s,由10?组成:?每次都可以任意替换成0或者1问我们这个子字符串中,能够组成010101这样两两互不相等的字符串的数量最大是多少?input30?10????10??1100output8625#include<bits/stdc++.h>usin......