曲线

属性

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
计算弗莱纳标架,实际就是管道每一段的计算的值,每一帧都是有三个参数组成,用于拉伸图形或者管道图形

computeFrenetFrames示例

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学习之曲线的更多相关文章

  1. Android 贝塞尔曲线解析

    相信很多同学都知道"贝塞尔曲线"这个词,我们在很多地方都能经常看到.利用"贝塞尔曲线"可以做出很多好看的UI效果,本篇博客就让我们一起学习"贝塞尔曲线 ...

  2. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十四章:曲面细分阶段

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十四章:曲面细分阶段 代码工程地址: https://github. ...

  3. 彻底理解webservice SOAP WSDL

    WebServices简介 先给出一个概念 SOA ,即Service Oriented Architecture ,中文一般理解为面向服务的架构, 既然说是一种架构的话,所以一般认为 SOA 是包含 ...

  4. sublime3 插件

    Sublime Text 3能用支持的插件推荐 从二月份用测试版本build 3012开始用sublime text 3,虽然很多插件在sublime text 3不工作了,因为sublime tex ...

  5. 理解WebService SOAP WSDL

    WebServices简介 先给出一个概念 SOA ,即Service Oriented Architecture ,中文一般理解为面向服务的架构, 既然说是一种架构的话,所以一般认为 SOA 是包含 ...

  6. 【腾讯Bugly干货分享】React移动web极致优化

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/579083d1c9da73584b02587d 最近一个季度,我们都在为手Q家校 ...

  7. (文摘)彻底理解webservice SOAP WSDL

    WebServices特点介绍 WebServices 提供一个建立分布式应用的平台,使得运行在不同操作系统和不同设备上的软件,或者是用不同的程序语言和不同厂商的软件开发工具开发的软件,所有可能的已开 ...

  8. Spark入门实战系列--5.Hive(上)--Hive介绍及部署

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .Hive介绍 1.1 Hive介绍 月开源的一个数据仓库框架,提供了类似于SQL语法的HQ ...

  9. Hive介绍、安装(转)

    1.Hive介绍 1.1 Hive介绍 Hive是一个基于Hadoop的开源数据仓库工具,用于存储和处理海量结构化数据.它是Facebook 2008年8月开源的一个数据仓库框架,提供了类似于SQL语 ...

随机推荐

  1. python时间序列按频率生成日期

    有时候我们的数据是按某个频率收集的,比如每日.每月.每15分钟,那么我们怎么产生对应频率的索引呢?pandas中的date_range可用于生成指定长度的DatetimeIndex.我们先看一下怎么生 ...

  2. 在Ubuntu环境下搭建esp32开发环境

    第一步:下载必要的库文件   sudo apt-get install git make gcc libncurses5-dev flex bison gperf python-serial     ...

  3. 【剑指Offer】44、反转单词序列

      题目描述:   牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,&qu ...

  4. NOIP2015 DAY2 T1跳石头

    传送门 题目背景 一年一度的“跳石头”比赛又要开始了! 题目描述 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起点和终点.在起点和终点之间,有 N 块 ...

  5. QuickTest Professional对web网站进行测试后没有生成脚本信息解决办法

    QTP是Quick Test Professional的简称,是一种自动测试工具.使用QTP的目的是想用它来执行重复的自动化测试,主要是用于回归测试和测试同一软件的新版本.因此你在测试前要考虑好如何对 ...

  6. 【codeforces 483B】Friends and Presents

    [链接] 我是链接,点我呀:) [题意] [题解] 我们可以二分n的值,设为mid 那么对于n=mid 我们可以算出来以下3个东西 temp1 = n/x; temp2 = n/y; temp3 = ...

  7. 嵌入式linux实现NAT端口映射

    场景: 1.嵌入式linux系统内已经在2个网卡,分别为eth0(内网物理网卡,ip地址:192.168.1.4)以及ppp1(VPN客户端通过PPTP协议拨号生成的虚拟网卡,ip地址:192.168 ...

  8. [bzoj1195][HNOI2006]最短母串_动态规划_状压dp

    最短母串 bzoj-1195 HNOI-2006 题目大意:给一个包含n个字符串的字符集,求一个字典序最小的字符串使得字符集中所有的串都是该串的子串. 注释:$1\le n\le 12$,$1\le ...

  9. [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 ...

  10. csu 1030: 素数槽

     素数槽 Description 处于相邻的两个素数p和p + n之间的n - 1个连续的合数所组成的序列我们将其称为长度为n的素数槽.比如,‹24, 25, 26, 27, 28›是处于素数23 ...