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ố
point là Point2d 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 |