Three学习之曲线
曲线
属性
1、 .arcLengthDivisions
当通过.getLengths计算曲线的累积段长度时,此值决定了分割的数量。为了确保在使用.getSpacedPoint等方法时的精度,如果曲线非常大,建议增加.arcLengthDivision属性。默认值为200。
方法
1、.getPoint ( t : Float, optionalTarget : Vector ) : Vector
// getPoint方法返回在curve对象上t点(取值范围0.0-1.0之间)的矢量.
t: 来获取在任意百分比下的t点的向量,百分比的值限于[0-1]。0是从路径的第一个点开始算起,1是最后一点,t=0.6表示从起点开始的60%处的点的向量。
optionalTarget: (可选)如果指定,结果将复制到此向量,否则将创建一个新的向量。
2、.getPointAt ( u : Float, optionalTarget : Vector ) : Vector
// 根据弧长返回曲线上给定位置的矢量。
u: u的取值范围是0.0 - 1.0, 将曲线作为一个整体, 一段弧长占曲线总长度的百分比。
3、.getPoints ( divisions : Integer ) : Array
// getPoints方法根据divisions将曲线等分,获得在曲线对象上等分点的点序列.如果没有设置参数divisions,默认初始化为5等分.返回对应等分线段顶点的坐标数组.数组长度为(divisions + 1)
divisions -- 将曲线分成的段数,默认是5
4、.getSpacedPoints ( divisions : Integer ) : Array
// getSpacedPoints方法根据divisions将曲线等分,获得在曲线对象上等分点的点序列.如果没有设置参数divisions,默认初始化为5等分.返回对应等分线段端点在曲线上的相对位置数组,用弧长表示.
// 获得一系列顶点的相对位置的数组.调用getPointAt方法。
源码:
THREE.Curve.prototype.getSpacedPoints = function ( divisions ) {
if ( ! divisions ) divisions = 5;
var d, pts = [];
for ( d = 0; d <= divisions; d ++ ) {
pts.push( this.getPointAt(d / divisions ));
}
return pts;
};
5、.getLength () : Float
获取曲线的长度
6、.getLengths ( divisions : Integer ) : Array
将曲线分成divisions等份,从起点开始获取每个等分点距离起点的长度,数组长度为divisions + 1
e.g.: [0, 32.40468003621915, 64.70282683002952, 96.89129617675769, 129.189442970568, 161.59412300678719]
7、.updateArcLengths () : null
// 更新累积段距离缓存。调用getLengths方法,更新长度数组.
8、.getUtoTmapping ( u : Float, distance : Float ) : Float
// 输入u(0~1),将曲线作为一个整体,一段弧长占曲线总长度的百分比。返回这个点处的百分比
distance: 如果设置长度值, 则以该段长度为总长度,计算u占这段曲线的百分比,返回对应点的占比。
9、.getTangent ( t : Float ) : Vector
// getTangent方法将返回一个点t在曲线上位置向量的法线向量
源码:
THREE.Curve.prototype.getTangent = function( t ) {
//这里为了给向量设定一个方向.
var delta = 0.0001; // 设置一个delta值
var t1 = t - delta; // t点减delta值,
var t2 = t + delta; // t点加delta值.
// tan(0)和tan(1)无法取值,所以采用近似值
if ( t1 < 0 ) t1 = 0;
if ( t2 > 1 ) t2 = 1;
var pt1 = this.getPoint( t1 );
var pt2 = this.getPoint( t2 );
var vec = pt2.clone().sub(pt1); // pt2向量减去pt1向量
return vec.normalize(); // 单位化
//返回一个点t在曲线上位置向量的法线向量.
10、.getTangentAt ( u : Float ) : Vector
11、.computeFrenetFrames ( segments : Integer, closed : Boolean ) : Object
计算弗莱纳标架,实际就是管道每一段的计算的值,每一帧都是有三个参数组成,用于拉伸图形或者管道图形
12、.toJSON () : Object
返回一个曲线 JSON 对象
13、.fromJSON ( json : Object ) : Curve
复制一个json格式的曲线,返回一个曲线
path
构造器:
1、Path( points : Array )
points是二维点的数组,第一个点作为起点,然后将连续点作为线添加到曲线数组中。如果没有点,画了一个空路径,那么将原点作为currentPoint
属性
1、currentPoint
当前路径的起点
方法
1、圆
.absarc ( x : Float, y : Float, radius : Float, startAngle : Float, endAngle : Float, clockwise : Float )
x, y: 圆心位置
clockwise :是否顺时针方向画圆,默认是false
2、椭圆:
.absellipse ( x : Float, y : Float, xRadius : Float, yRadius : Float, startAngle : Float, endAngle : Float, clockwise : Float, rotation : Float )
rotation: 椭圆的旋转角,从x正轴方向逆时针旋转,默认是0。如果现在有一段从x轴方向逆时针画30度的圆弧,rotation设为2/3PI, 则该段弧是从x轴正方形逆时针60度开始,画到逆时针90度结束。
3、圆:
.arc ( x : Float, y : Float, radius : Float, startAngle : Float, endAngle : Float, clockwise : Float )
4、椭圆
.ellipse ( x : Float, y : Float, xRadius : Float, yRadius : Float, startAngle : Float, endAngle : Float, clockwise : Float, rotation : Float )
5、贝塞尔曲线
.bezierCurveTo ( cp1X : Float, cp1Y : Float, cp2X : Float, cp2Y : Float, x : Float, y : Float )
创建一段从currentPoint(如果没有设置就是原点)开始的贝塞尔曲线,以(cp1X, cp1Y)和(cp2X, cp2Y)作为控制点,(x, y)为终点。
6、原点位置
.moveTo(x, y)
将原点设置为(x, y)
7、.lineTo(x, y)
从原点到(x, y)连一条线。
8、.setFromPoints ( vector2s : Array )
points -- 二维点的数组。
这个方法将二维点的数组以直线连接起来,形成折线。可以用在三维点数组
9、.splineThru ( points : Array )
这个方法将二维点的数组以曲线连接起来,形成一条平滑曲线。这个方法只能用于二维点数组
10、二次方曲线
.quadraticCurveTo ( cpX : Float, cpY : Float, x : Float, y : Float )
以(cpX, cpY)为控制点, 起点为currentPoint, 终点为(x, y)
Three学习之曲线的更多相关文章
- Android 贝塞尔曲线解析
相信很多同学都知道"贝塞尔曲线"这个词,我们在很多地方都能经常看到.利用"贝塞尔曲线"可以做出很多好看的UI效果,本篇博客就让我们一起学习"贝塞尔曲线 ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十四章:曲面细分阶段
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十四章:曲面细分阶段 代码工程地址: https://github. ...
- 彻底理解webservice SOAP WSDL
WebServices简介 先给出一个概念 SOA ,即Service Oriented Architecture ,中文一般理解为面向服务的架构, 既然说是一种架构的话,所以一般认为 SOA 是包含 ...
- sublime3 插件
Sublime Text 3能用支持的插件推荐 从二月份用测试版本build 3012开始用sublime text 3,虽然很多插件在sublime text 3不工作了,因为sublime tex ...
- 理解WebService SOAP WSDL
WebServices简介 先给出一个概念 SOA ,即Service Oriented Architecture ,中文一般理解为面向服务的架构, 既然说是一种架构的话,所以一般认为 SOA 是包含 ...
- 【腾讯Bugly干货分享】React移动web极致优化
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/579083d1c9da73584b02587d 最近一个季度,我们都在为手Q家校 ...
- (文摘)彻底理解webservice SOAP WSDL
WebServices特点介绍 WebServices 提供一个建立分布式应用的平台,使得运行在不同操作系统和不同设备上的软件,或者是用不同的程序语言和不同厂商的软件开发工具开发的软件,所有可能的已开 ...
- Spark入门实战系列--5.Hive(上)--Hive介绍及部署
[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .Hive介绍 1.1 Hive介绍 月开源的一个数据仓库框架,提供了类似于SQL语法的HQ ...
- Hive介绍、安装(转)
1.Hive介绍 1.1 Hive介绍 Hive是一个基于Hadoop的开源数据仓库工具,用于存储和处理海量结构化数据.它是Facebook 2008年8月开源的一个数据仓库框架,提供了类似于SQL语 ...
随机推荐
- python时间序列按频率生成日期
有时候我们的数据是按某个频率收集的,比如每日.每月.每15分钟,那么我们怎么产生对应频率的索引呢?pandas中的date_range可用于生成指定长度的DatetimeIndex.我们先看一下怎么生 ...
- 在Ubuntu环境下搭建esp32开发环境
第一步:下载必要的库文件 sudo apt-get install git make gcc libncurses5-dev flex bison gperf python-serial ...
- 【剑指Offer】44、反转单词序列
题目描述: 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,&qu ...
- NOIP2015 DAY2 T1跳石头
传送门 题目背景 一年一度的“跳石头”比赛又要开始了! 题目描述 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起点和终点.在起点和终点之间,有 N 块 ...
- QuickTest Professional对web网站进行测试后没有生成脚本信息解决办法
QTP是Quick Test Professional的简称,是一种自动测试工具.使用QTP的目的是想用它来执行重复的自动化测试,主要是用于回归测试和测试同一软件的新版本.因此你在测试前要考虑好如何对 ...
- 【codeforces 483B】Friends and Presents
[链接] 我是链接,点我呀:) [题意] [题解] 我们可以二分n的值,设为mid 那么对于n=mid 我们可以算出来以下3个东西 temp1 = n/x; temp2 = n/y; temp3 = ...
- 嵌入式linux实现NAT端口映射
场景: 1.嵌入式linux系统内已经在2个网卡,分别为eth0(内网物理网卡,ip地址:192.168.1.4)以及ppp1(VPN客户端通过PPTP协议拨号生成的虚拟网卡,ip地址:192.168 ...
- [bzoj1195][HNOI2006]最短母串_动态规划_状压dp
最短母串 bzoj-1195 HNOI-2006 题目大意:给一个包含n个字符串的字符集,求一个字典序最小的字符串使得字符集中所有的串都是该串的子串. 注释:$1\le n\le 12$,$1\le ...
- [Python] Use Static Typing in Python 3.6
In this lesson, you will learn how to statically type variables in Python 3.6 Static typing can help ...
- csu 1030: 素数槽
素数槽 Description 处于相邻的两个素数p和p + n之间的n - 1个连续的合数所组成的序列我们将其称为长度为n的素数槽.比如,‹24, 25, 26, 27, 28›是处于素数23 ...