HtmlDialog (Bài trước)
(Bài tiếp) Point3d, Vector3d

Lớp Array

Lớp Array trong SketchUp Ruby nó thêm vào lớp Array tiêu chuẩn của Ruby một số phương thức. Đặc biệt là các phương thức giúp cho mảng này ứng xử như các đối tượng lớp Geom::Vector3d hoặc Geom::Point3d.

Ví dụ mảng a = [0, 0, 1] biểu diễn một vector với ba thành phần tọa độ x,y,z tương tứng là 0,0,1. Đồng thời nó cũng biểu diễn một điểm với các thành phần tọa độ x,y,z theo thứ tự tương ứng.

Khi nào mảng a trên là điểm, là vector tùy thuộc vào ngữ cảnh sử dụng nó, ví dụ: Phương thức add_cpoint của Entities tạo ra một Sketchup::ConstructionPoint tham số nó nhận là một Point3d, lúc này mảng a đưa vào làm tham số nó sẽ tự ứng xử như là Point3D

a = [0,0,1]
entities = Sketchup.active_model.entities
entities.add_cpoint(a)

Tuy nhiên với các phương thức nhận tham số là vector3D thì mảng a lại là vector3D

a = [0,0,1]
transformation = Geom::Transformation.new(a)

Khi mảng hai phần tử thì nó tương ứng với Point2d hoặc Vector2d

Các phương thức Array

cross Phương thức tính (có hướng) của hai vector
v1 = [1, 0, 0]
v2 = [0,1,0]

t1 = v1.cross v2  # Vector3d(0, 0, 1)
t2 = v2.cross v1  # Vector3d(0, 0, -1)
t3 = v1.cross v1  # Vector3d(0, 0, 0)
distance #distance(point) ⇒ Length
Tính toán trả về đối tượng Length, là khoảng cách giữa hai điểm (số thực). Trong đó tham số pointPoint2d hoặc Point3d
p1 = [0, 0, 0]
puts p1.distance [10.mm,0,0]    # Tham số Point3d
puts p1.distance [10.mm,10.mm]  # Tham số Point3d
distance_to_line distance_to_line(point, vector) ⇒ Length
distance_to_line(point1, point2) ⇒ Length
Tính khoảng cách tới một đường, đường xác định bởi tham số - có thể đường xác định bởi 2 điểm (Point3d, Point2d) hoặc bởi một điểm và một vector
line = [Geom::Point3d.new(0, 0, 0), Geom::Vector3d.new(0, 0, 1)]
point = [10, 10, 10]
distance = point.distance_to_line(line)
distance_to_plane Tính toán khoảng cách từ điểm đến một mặt. Tham số là thông tin về mặt, một mặt có thể là: [một điểm, một vector], [ba điểm]
plane = [Geom::Point3d.new(0, 0, 0), Geom::Vector3d.new(0, 0, 1)]
array = [10, 10, 10]
distance = array.distance_to_plane(plane)
dot Tích vô hướng với một vector khác
vector = Geom::Vector3d.new(1, 0, 0)
array = [0, 0, 1]
dot_product = array.dot(vector)  # 0 - hai vector vuong goc nhau
normalize Chuẩn hóa vector (đưa chiều dài vector về đơn vị, các thành phần được nhân tỷ lệ tương ứng)
array = [2, 2, 0]
normal_vector = array.normalize
offset
offset!
Tạo một mảng mới bằng cách dịch theo một vector
array = [10, 10, 10]
vector = Geom::Vector3d.new(0, 0, 1)
length_array = array.offset(vector)  #[10.0, 10.0, 11.0]
offset! tương tự nhưng nó biến đổi chỉnh mảng gốc chứ không trả về mảng mới
on_line? Kiểm tra điểm nằm trên đường, tham số là một đường biểu diễn bằng [điểm đường đi qua, và phương là vector] hoặc [hai điểm đường đi qua]
line = [Geom::Point3d.new(0, 0, 0), Geom::Vector3d.new(0, 0, 1)]
array = [10, 10, 10]
on_plane = array.on_line?(line)
on_plane? Kiểm tra điểm nằm trên mặt, tham số mặt giống hàm distance_to_plane
plane = [Geom::Point3d.new(0, 0, 0), Geom::Vector3d.new(0, 0, 1)]
array = [10, 10, 10]
on_plane = array.on_plane?(plane)
project_to_line Chiếu điểm xuống một đường
point = [0,0,1] # điểm trên trục z, z = 1
line  = [Geom::Point3d.new(0, 0, 0),  Geom::Vector3d.new(1, 0, 1)] # đường chéo 45 độ trong xz
point.project_to_line(line)  # [0.5, 0.0, 0.5]
project_to_plane chiếu điểm xuống mặt
transform transform(transform)
Phép biến đổi điểm, tham số là Geom::Transformation (xoay, tịnh tiến hay tỷ lệ)
transform! Giống transform nhưng biến đổi chính mảng gốc
vector_to Tạo vector tới điểm
p1 = [1,1,0]
p2 = [2,2,0]
p1.vector_to p2
x
y
z
Lấy các thành phần x,y,z
x=
y=
z=
Gán các thành phần x,y,z

Đăng ký nhận bài viết mới
HtmlDialog (Bài trước)
(Bài tiếp) Point3d, Vector3d