[英]Algorithm for discretizing a surface
我手頭的問題是:
我在Sketchup中具有任意形狀的曲面,並且想要檢查該曲面的哪一部分處於陰影下以及哪一部分暴露在陽光下。
我的方法是在表面上創建點,然后檢查每個點與太陽的當前位置之間是否有障礙物。 我應該補充一點,我將需要知道哪些點將在陰影下,哪些點在直射陽光下,即僅知道30%的表面已被陰影遮擋不足以完成我想做的事情。
有誰對Sketchup的Ruby API足夠了解,可以告訴我如何創建積分? 我找到了PolygonMesh
對象,該對象可能對我有用,但無法正常工作。
取而代之的是,我可以/應該閱讀哪些通用算法來創建積分?
Sketchup或總體上是否有更好的方法可以實現我想要的?
非常感謝
我取得了一些進步!
一種選擇是在質心處創建一個點。 對於我所說的規則多邊形,即頂點均勻分布的地方(例如三角形或矩形),質心的坐標為
x_com = average(vertices.x)
y_com = average(vertices.y)
z_com = average(vertices.z)
有關更多詳細信息,請參見此處: http : //www.mathworks.com/matlabcentral/newsreader/view_thread/22176
這樣可以在質心處創建一個構造點,如下所示:
# 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形表面)可能存在問題。
無論如何,看來我有一個起點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.