Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
车家大少爷
three.js
提交
39b35d32
T
three.js
项目概览
车家大少爷
/
three.js
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
three.js
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
39b35d32
编写于
1月 22, 2017
作者:
T
Tristan VALCKE
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Protect Triangle against the closure circular reference bug
上级
7261643d
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
57 addition
and
53 deletion
+57
-53
src/math/Triangle.js
src/math/Triangle.js
+57
-53
未找到文件。
src/math/Triangle.js
浏览文件 @
39b35d32
...
...
@@ -15,90 +15,94 @@ function Triangle( a, b, c ) {
}
Triangle
.
normal
=
function
()
{
Object
.
assign
(
Triangle
,
{
var
v0
=
new
Vector3
();
normal
:
function
()
{
return
function
normal
(
a
,
b
,
c
,
optionalTarget
)
{
var
v0
=
new
Vector3
();
var
result
=
optionalTarget
||
new
Vector3
();
return
function
normal
(
a
,
b
,
c
,
optionalTarget
)
{
result
.
subVectors
(
c
,
b
);
v0
.
subVectors
(
a
,
b
);
result
.
cross
(
v0
);
var
result
=
optionalTarget
||
new
Vector3
();
var
resultLengthSq
=
result
.
lengthSq
();
if
(
resultLengthSq
>
0
)
{
result
.
subVectors
(
c
,
b
);
v0
.
subVectors
(
a
,
b
);
result
.
cross
(
v0
);
return
result
.
multiplyScalar
(
1
/
Math
.
sqrt
(
resultLengthSq
)
);
var
resultLengthSq
=
result
.
lengthSq
();
if
(
resultLengthSq
>
0
)
{
}
return
result
.
multiplyScalar
(
1
/
Math
.
sqrt
(
resultLengthSq
)
);
return
result
.
set
(
0
,
0
,
0
);
}
}
;
return
result
.
set
(
0
,
0
,
0
)
;
}()
;
}
;
// static/instance method to calculate barycentric coordinates
// based on: http://www.blackpawn.com/texts/pointinpoly/default.html
Triangle
.
barycoordFromPoint
=
function
()
{
}(),
var
v0
=
new
Vector3
();
var
v1
=
new
Vector3
();
var
v2
=
new
Vector3
();
// static/instance method to calculate barycentric coordinates
// based on: http://www.blackpawn.com/texts/pointinpoly/default.html
barycoordFromPoint
:
function
()
{
return
function
barycoordFromPoint
(
point
,
a
,
b
,
c
,
optionalTarget
)
{
var
v0
=
new
Vector3
();
var
v1
=
new
Vector3
();
var
v2
=
new
Vector3
();
v0
.
subVectors
(
c
,
a
);
v1
.
subVectors
(
b
,
a
);
v2
.
subVectors
(
point
,
a
);
return
function
barycoordFromPoint
(
point
,
a
,
b
,
c
,
optionalTarget
)
{
var
dot00
=
v0
.
dot
(
v0
);
var
dot01
=
v0
.
dot
(
v1
);
var
dot02
=
v0
.
dot
(
v2
);
var
dot11
=
v1
.
dot
(
v1
);
var
dot12
=
v1
.
dot
(
v2
);
v0
.
subVectors
(
c
,
a
);
v1
.
subVectors
(
b
,
a
);
v2
.
subVectors
(
point
,
a
);
var
denom
=
(
dot00
*
dot11
-
dot01
*
dot01
);
var
dot00
=
v0
.
dot
(
v0
);
var
dot01
=
v0
.
dot
(
v1
);
var
dot02
=
v0
.
dot
(
v2
);
var
dot11
=
v1
.
dot
(
v1
);
var
dot12
=
v1
.
dot
(
v2
);
var
result
=
optionalTarget
||
new
Vector3
(
);
var
denom
=
(
dot00
*
dot11
-
dot01
*
dot01
);
// collinear or singular triangle
if
(
denom
===
0
)
{
var
result
=
optionalTarget
||
new
Vector3
();
// collinear or singular triangle
if
(
denom
===
0
)
{
// arbitrary location outside of triangle?
// not sure if this is the best idea, maybe should be returning undefined
return
result
.
set
(
-
2
,
-
1
,
-
1
);
// arbitrary location outside of triangle?
// not sure if this is the best idea, maybe should be returning undefined
return
result
.
set
(
-
2
,
-
1
,
-
1
);
}
}
var
invDenom
=
1
/
denom
;
var
u
=
(
dot11
*
dot02
-
dot01
*
dot12
)
*
invDenom
;
var
v
=
(
dot00
*
dot12
-
dot01
*
dot02
)
*
invDenom
;
var
invDenom
=
1
/
denom
;
var
u
=
(
dot11
*
dot02
-
dot01
*
dot12
)
*
invDenom
;
var
v
=
(
dot00
*
dot12
-
dot01
*
dot02
)
*
invDenom
;
// barycentric coordinates must always sum to 1
return
result
.
set
(
1
-
u
-
v
,
v
,
u
);
// barycentric coordinates must always sum to 1
return
result
.
set
(
1
-
u
-
v
,
v
,
u
);
};
}
;
}
(),
}();
containsPoint
:
function
()
{
Triangle
.
containsPoint
=
function
()
{
var
v1
=
new
Vector3
();
var
v1
=
new
Vector3
();
return
function
containsPoint
(
point
,
a
,
b
,
c
)
{
return
function
containsPoint
(
point
,
a
,
b
,
c
)
{
var
result
=
Triangle
.
barycoordFromPoint
(
point
,
a
,
b
,
c
,
v1
);
var
result
=
Triangle
.
barycoordFromPoint
(
point
,
a
,
b
,
c
,
v
1
);
return
(
result
.
x
>=
0
)
&&
(
result
.
y
>=
0
)
&&
(
(
result
.
x
+
result
.
y
)
<=
1
);
return
(
result
.
x
>=
0
)
&&
(
result
.
y
>=
0
)
&&
(
(
result
.
x
+
result
.
y
)
<=
1
)
;
}
;
}
;
}
()
}
(
);
}
);
Triangle
.
prototype
=
{
Object
.
assign
(
Triangle
.
prototype
,
{
constructor
:
Triangle
,
...
...
@@ -256,7 +260,7 @@ Triangle.prototype = {
}
};
}
)
;
export
{
Triangle
};
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录