簡體   English   中英

在3d列表python中獲取球體點

[英]Get points of sphere in 3d list python

我如何獲得半徑為 r 的球體的點? 我正在尋找類似 bresenham 的圓繪制算法但在 3d 中的東西。 我嘗試只使用 2d 算法並在彼此后面逐漸增加大小繪制圓圈,但這並不奏效。

在此處輸入圖片說明

(圖片邊緣扭曲。那是正常的。)

你知道有什么可以解決這個問題的嗎? 我可以在較大的圓圈內再畫一個較小的圓圈,但那是作弊。 是的,我瀏覽了現有的問題,但找不到任何適合我的目的。

編輯:

def drawCircle(self, xyz, r):
        xc, yc, zc = xyz
        coords = []
        
        def drawC(xc, yc, zc, x, y):
            coords.append((xc+x, yc+y, zc))
            coords.append((xc-x, yc+y, zc))
            coords.append((xc+x, yc-y, zc))
            coords.append((xc-x, yc-y, zc))
            coords.append((xc+y, yc+x, zc))
            coords.append((xc-y, yc+x, zc))
            coords.append((xc+y, yc-x, zc))
            coords.append((xc-y, yc-x, zc))
            
        x = 0
        y = r
        d = 3 - 2 * r
        drawC(xc, yc, zc, x, y) 
        while y >= x:
            x += 1
            if (d > 0):
                y -= 1 
                d = d + 4 * (x - y) + 10 
            else:
                d = d + 4 * x + 6
            drawC(xc, yc, zc, x, y) 
        
        for c in coords:
            self.drawPixel(c)
        return coords

這個函數取 ax,y,z 點和一個半徑,計算圓上的所有點並將它們繪制成一個 3d 數組,可以通過另一個函數繪制到屏幕上。 這是一個 r = 10 的示例。(圓圈為粉紅色。我只是在測試顏色。)如果可能,我正在尋找或沒有 np 的版本。

圖片

您可以使用下面的代碼創建一個居中的球體。

import numpy as np


r=2
y,x,z = np.ogrid[-r:r+1, -r:r+1, -r:r+1,]
mask = x**2 + y**2 + z**2 <= r**2

print(mask)

暫無
暫無

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

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