![](https://t1.daumcdn.net/cfile/cafe/2670543D58DCE9AF2D)
두 엣지 사이에 엣지가 존재하면 완전한 평면이 아닐 수 있어요.. 고려하시고.
그래서 이런건 원하시는 목적 하시는 바에 맞춰서 구상하시는게 좋아요..
http://help.autodesk.com/view/3DSMAX/2016/ENU/?guid=__files_GUID_1193B0E7_10DF_4D3F_A89F_29FF0A291646_htm
위 경로의 내용들 한번씩 해보시면 수직인 벡터 쉽게 얻으실 수 있을거 같고요
엣지 상의 임의점과 수직인 벡터가 향한 임의 점의 잇는 직선
그리고 이를 크로스하는 직선의 두점이 교차하는 지점의 좌표를 리턴하는 함수 남깁니다.
두직선의 교점을 리턴합니다.
fn LineLineIntersection p1 p2 p3 p4 =
(
mua=0
mub=0
Pa = P1 + mua*(P2 - P1)
Pb = P3 + mub*(P4 - P3)
local EPS = 2e-6;--EPS 2 micro
local p13 = Point3 0 0 0
local p43 = Point3 0 0 0
local p21 = Point3 0 0 0
local d1343,d4321,d1321,d4343,d2121;
local numer,denom;
p13.x = p1.x - p3.x;
p13.y = p1.y - p3.y;
p13.z = p1.z - p3.z;
p43.x = p4.x - p3.x;
p43.y = p4.y - p3.y;
p43.z = p4.z - p3.z;
if ( (ABS(p43.x) < EPS) and \
(ABS(p43.y) < EPS) and \
(ABS(p43.z) < EPS) ) do (false)
p21.x = p2.x - p1.x;
p21.y = p2.y - p1.y;
p21.z = p2.z - p1.z;
if ( (ABS(p21.x) < EPS) and \
(ABS(p21.y) < EPS) and \
(ABS(p21.z) < EPS) ) do (false)
d1343 = p13.x * p43.x + p13.y * p43.y + p13.z * p43.z;
d4321 = p43.x * p21.x + p43.y * p21.y + p43.z * p21.z;
d1321 = p13.x * p21.x + p13.y * p21.y + p13.z * p21.z;
d4343 = p43.x * p43.x + p43.y * p43.y + p43.z * p43.z;
d2121 = p21.x * p21.x + p21.y * p21.y + p21.z * p21.z;
denom = d2121 * d4343 - d4321 * d4321;
if (ABS(denom) < EPS) do (false)
numer = d1343 * d4321 - d1321 * d4343;
local mua = numer / denom;
local mub = (d1343 + d4321 * (mua)) / d4343;
pa.x = p1.x + (mua * p21.x);
pa.y = p1.y + (mua * p21.y);
pa.z = p1.z + (mua * p21.z);
pb.x = p3.x + (mub * p43.x);
pb.y = p3.y + (mub * p43.y);
pb.z = p3.z + (mub * p43.z);
f=0.75
interMediatePosition=pa*(1-f*f)+pb*f*f
interMediatePosition
)
첫댓글 우와 감사합니다. ㅎㅎ 이렇게 정성껏 알려주셔서 정성스럽게 파악해보겠습니다 ㅎㅎ 감사합니다