Numerical representation of vectors
Length
double length = Math.Sqrt(v.x * v.x + v.y * v.y + v.z * v.z);
Multiplication by a number(scalar)
double scalar = 2.5;
Vector v1 = new Vector( v0.x * scalar , v0.y * scalar , v0.z * scalar);
Vectors as differences of Points
double distance = Math.Sqrt(
(p0.x - p1.x) * (p0.x - p1.x) + (p0.y - p1.y) * (p0.y - p1.y) + (p0.z - p1.z) * (p0.z - p1.z)
);
Unit Vectors
double len = Math.Sqrt(v.x * v.x + v.y * v.y + v.z * v.z);
Vector unitV = new Vector(v.x / len , v.y / len , v.z / len);
Addition of Vectors
Vector resultV = new Vector( v0.x + v1.x , v0.y + v1.y , v0.z + v1.z);
Subtraction of Vectors
Vector resultV = new Vector( v0.x - v1.x , v0.y - v1.y , v0.z - v1.z);
Dot Product
double dotProduct = v0.x * v1.x + v0.y * v1.y + v0.z * v1.z;
Cross Product
Vector normalV = Vector(
v0.y * v1.z - v0.z * v1.y ,
v0.z * v1.x - v0.x * v1.z ,
v0.x * v1.y - v0.y * v1.x
);
Angle between vectors
double angle = Math.Acos(
(v0 * v1) / ( v0.length() * v1.length() )
);
Angle of triangle
Vector v0 = p1-p0;
Vector v1 = p2-p0;
double angle = Math.Acos(
v0 * v1) / (v0.length() * v1.length())
);
Area of triangle
Vector v0 = p1 - p0;
Vector v1 = p2 - p0;
Vector cv = crossProduct(v0, v1);
double area = cv.length() * 0.5;
Triangle unit normal vector
Vector v0 = p1 - p0;
Vector v1 = p2 - p0;
Vector normalV = crossProduct (v0 , v1);
normalV.normalized();
Projection of a point to a line
Vector v0 = p1 - p0;
Vector v1 = tP - p0; v0.normalized();
projectedPt = v0 + v0 * (v1 * v0);
Mid-point
Point midPoint = (p1 + p2) * 0.5;
Center of triangle
Point midPoint = ( p1 + p2 + p3 ) * ( 1.0 / 3.0) ;
Center of point cloud
Point midPoint = new Point();
for(int i=0; i < pt.Length; ++i) {
pmean += pt[i]; // 모든 포인트의 위치를 더한다.
}
midPoint *= ( 1.0 / (pt.Length) );
The basic operation of Vectors
Division of Vectors
Common Geometric problems
Distance between two vectors
Vector at t
Angle Between Vectors
Angle of Triangle
Area of Triangle
Triangle Unit normal
Projection of point to line
Projection of Point to plane
Point at a distance d along the line between two vectors
Linear interpolation between two vectors
Center of triangle
Center of point cloud
질문:
R(Real Numbers) 1은 1차원 월드 공간 좌표계로, 점을 선상에서 나타내 주는 거죠, 그리고 점을 모으면 선이 되겠죠.
R2는 2차원 좌표계로, 점을 2차원 공간상에 점을 찍어 주는 것이죠.
R3는 3차원 좌표계로. 축에 3개인 공간에서 점을 표현하는 것이죠.
지오메트리는 결국 벡터(포인트)로 분해가 가능하니, 포인트를 R1 R2 R3 스페이스 각각의 좌표계 해석이 가능하겠죠.
일반적으로, 라인에서 포인트를 추출할 때는, 라인을 R1으로 해석해서, T 값을 가지고 라인상의 지점을 포인트(xyz)로 추출할 수 있어요.
면에서 포인트를 추출할 때, 면은, R2 공간 좌표계로 해석이 가능하기 때문에, U, V 값을 가지고 표면상의 지점을 포인트(xyz)로 추출할 수 있어요
우리가 흔히 쓰는 CAD 시스템의 3차원 공간 좌표계에의 어떤 포인트의 위치를 R3좌표계 즉 xyz의 값으로 공간상에 새로운 포인트(xyz)로 바로 사용하여, 추출할 수 있겠죠.
프로젝션의 개념으로 하나의 벡터가(포인트) 다양한 공간 좌표계로 투영하여 해석이 가능한 개념이에요.
다음의 이미지도 보면, 하나의 점이 3개의 공간으로 해석되는 예이고, 이것은 디자인 스크립팅을 하다 보면, 알고리즘을 만들다 보면, 선과 면 그리고 3차원 공간상에서 특정 지점들의 위치를 다른 좌표계로 투영하는 일은 매우 빈번이 발생해요.
https://developer.rhino3d.com/images/primer-rhinospaces.svg
질문을 다시 상기해보면,
..........................................................
질문 1 “점은 R3값만 존재하고”
답변: 점은, 좌표계에 따라, R1 공간일 경우에는 하나의 값(t)만 있으면 되고
R2공간은 두 개의 값(u, v) R3공간은 세 개의 값(xyz)이 있어야 표현이 가능하죠
..........................................................
질문 2 선은 R1(길이)과 R3값만 존재하고
답변: R1은 t 값만 존재하는 좌표계이죠. 그런데 라이노 API에서는 이 t 값을 R3값으로 프로젝션 해주는 함수가 있죠 이것을 활용하면, R1 공간으로 해석이 가능한, 즉 라인의 특점 한 포인트(t)를(t)을 R3 공간의 포인트(xyz)로 환산할 수 있는 것이죠. 반대로도 가능하고요..
..........................................................
면은 R2(uv)와 R3값만 존재한다고 생각하면 될까요?
답변: 위의 질문과 같게, R2로 좌표계의 공간은 즉 면이죠. 면 상에서 어떠한 지점을 기술하면, UV로 설명할 수 있죠. 그 UV를 R3 월드 좌표계로 투영하면 그 지점은(UV) 같은 R3의 지점으로(XYZ)로 환산된다는 것이죠. 이것도 반대로도 가능하고요.
다음의 비디오의 다음의 초에, t-value 그리고 FrameAT이 그것과 관련된 내용일 것 같아요. 자세히 기억은 안 나는데 이것도 참조해 보세요.
32:07 - Curve, Tangent, t-Value, Reparameterize, Vector Display
54:19 - Frame At
'Workshop Index' 카테고리의 다른 글
Unity for Design Scripting and Visualization (0) | 2021.09.11 |
---|---|
CAD(Computer-aided design) 소프트웨어 개발 Starter! (0) | 2021.07.23 |
디자인 스크립팅을 위한 C# 기초 문법 [맴버십 강의] (0) | 2021.05.13 |
Episode B 그라스호퍼 컴포넌트 챌린지 & 코딩(Python Version) (입문자용) (0) | 2021.05.06 |
플러그인(Plugin) / 애드온(Addon) / 라이브러리(lib) (0) | 2021.04.20 |