Ruby 曲面离散化算法
我手头的问题是: 我在Sketchup中有一个任意形状的曲面,我想检查曲面的哪个部分处于阴影中,哪个部分暴露在阳光下 我的方法是在曲面上创建点,然后检查每个点与太阳当前位置之间是否存在任何障碍物。我需要补充的是,我需要知道哪些点处于阴影中,哪些点处于阳光直射下,即知道30%的表面处于阴影中并不足以满足我的要求Ruby 曲面离散化算法,ruby,algorithm,3d,sketchup,Ruby,Algorithm,3d,Sketchup,我手头的问题是: 我在Sketchup中有一个任意形状的曲面,我想检查曲面的哪个部分处于阴影中,哪个部分暴露在阳光下 我的方法是在曲面上创建点,然后检查每个点与太阳当前位置之间是否存在任何障碍物。我需要补充的是,我需要知道哪些点处于阴影中,哪些点处于阳光直射下,即知道30%的表面处于阴影中并不足以满足我的要求 有人对Sketchup的Ruby API了解得足够多,能告诉我如何创建点吗?我找到了可能对我有用的PolygonMesh对象,但无法使其工作 取而代之的是,我可以/应该阅读哪些通用算法可以
PolygonMesh
对象,但无法使其工作x_com = average(vertices.x)
y_com = average(vertices.y)
z_com = average(vertices.z)
有关更多详细信息,请参见此处:
这将允许在质心处创建构造点,如下所示:
# Find the centre of mass of a polygon based on the average of the x, y, z values.
# A construction point is added to the centre of mass
def centreofmass(aface)
mod = Sketchup.active_model # Open model
ent = mod.entities # All entities in model
vert = aface.vertices
n = 0
x = 0
y = 0
z = 0
vert.each{|i|
n += 1
x += i.position[0]
y += i.position[1]
z += i.position[2]
}
pt = Geom::Point3d.new(x/n,y/n,z/n)
c = ent.add_cpoint pt
end
从那里,我可能可以通过绘制从质心到原始顶点的直线来创建三角形。然后对新三角形重复此过程
这可能适用于大多数形状较为规则的曲面。我认为一侧顶点比另一侧多的多边形,以及形状不规则的多边形(例如细长的L形曲面)可能存在问题
不管怎样,看起来我有了一个起点