[英]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.