2013-06-20 61 views
1

我的問題是:算法手頭離散表面

我在SketchUp任意形狀的表面,並要檢查其表面的一部分是在樹蔭下,哪一部分暴露在陽光下。

我的方法是在表面創建點並隨後檢查每個點與太陽當前位置之間是否有障礙物。我還要補充一點,我需要知道哪些點會處於陰影中,哪些點處於直射陽光下,即知道30%的表面有陰影並不足以滿足我想要做的。

  1. 有沒有人知道Sketchup的Ruby API足以告訴我如何創建點?我發現PolygonMesh對象可能對我有用,但無法使其工作。

  2. 取而代之,我可以/應該閱讀哪些通用算法來創建點?

  3. 在Sketchup中有沒有更好的方法,或者可以實現我想要的一般嗎?

非常感謝

回答

0

我取得了一些進展!

一種選擇是在質心處創建一個點。對於我所說的正多邊形,即其中的頂點均勻分佈(如三角形或矩形),用於質心座標是

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形表面。

無論如何,它看起來像我有一個起點。