簡體   English   中英

Koch雪花渲染時間(以及如何使用烏龜繪制雪花)

[英]Koch snowflake rendering time (and how to draw a snowflake using turtle)

我目前正在研究MIT 6.006課程的在線課程材料,很有趣。 我在問題集2(在此處找到)上,對科赫雪花問題(問題1)的漸近渲染時間的計算存在疑問。

根據這些解決方案,當CPU負責渲染和坐標計算時,漸進渲染時間要比在CPU和GPU之間進行拆分的過程要快。 數學對我來說很有意義,但是有人對它為什么如此有直覺嗎?

在我看來,CPU仍然必須計算坐標以渲染雪花(Theta(4 ^ n)時間),然后必須渲染圖像。 在我看來,這些應該是加性的,而不是乘法性的。

但是,解表明它們是可乘的,因此,由於每個三角形/線段都較短(對於問題1中的最后兩個子問題),運行時間減少為Theta((4/3)^ n)或Theta(1)!

我不是計算機科學家,這對我來說只是個有趣的愛好。 我真的很感謝你們其中一位天才的回答:)

另外,我在玩python turtle模塊時獲得了一些樂趣。 以下是一些非常不完善的代碼,它們在python中繪制了科赫雪花:

import turtle

def snowflake(n,size=200):
    try: turtle.clear()
    except: pass
    turtle.tracer(0,0)
    snowflake_edge(n,size)
    turtle.right(120)
    snowflake_edge(n,size)
    turtle.right(120)
    snowflake_edge(n,size)
    turtle.update()
    turtle.hideturtle()

def snowflake_edge(n,size=200):
    if n==0:
        turtle.forward(size)
    else:
        snowflake_edge(n-1,size/3.0)
        turtle.left(60)
        snowflake_edge(n-1,size/3.0)
        turtle.right(120)
        snowflake_edge(n-1,size/3.0)
        turtle.left(60)
        snowflake_edge(n-1,size/3.0)

如問題集第5頁的注釋所示,CPU和GPU采取的方法不同。

僅使用CPU(無硬件加速)的方法是首先計算需要繪制的內容,然后將其發送到GPU進行繪制。 由於我們假設柵格化的成本大於收集線段的成本,因此繪制圖像的時間將由GPU決定,其成本與實際需要的像素數量成比例畫。

GPU-CPU(具有硬件加速)方法可計算所有大小的三角形,然后將它們發送到GPU,以繪制大三角形,刪除中間像素,繪制較小的三角形,刪除不需要的像素,依此類推。 由於繪圖需要很長時間,因此GPU必須花費的繪圖和擦除時間將占總時間。 由於最后將擦除大多數(漸近地為100%)像素,因此所花費的總時間將大大超過實際必須繪制的像素數量。

換句話說:硬件加速方案將大部分工作轉儲到GPU上,這比CPU慢得多。 如果在GPU處理過程中CPU還有其他事情需要處理,這沒關系; 但是,這里不是這種情況。 因此,CPU在浪費時間而GPU正在繪制圖形。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM