2 回答

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超8個(gè)贊
不可能在一條線上給出“所有”點(diǎn),因?yàn)橛袩o數(shù)個(gè)點(diǎn)。不過,您可以對(duì)整數(shù)等離散數(shù)據(jù)類型執(zhí)行此操作。如您的示例所示,我的回答采用浮點(diǎn)數(shù)。
從技術(shù)上講,浮點(diǎn)數(shù)以固定寬度的二進(jìn)制格式存儲(chǔ),因此它們是離散的,但我會(huì)忽略這一事實(shí),因?yàn)樗芸赡懿皇悄阆胍摹?/p>
正如您已經(jīng)輸入的問題,該行上的每個(gè)點(diǎn) P 都滿足此等式:
P = P1 + t * (P2 - P1), 0 < t < 1
我的版本使用 numpy 廣播來規(guī)避顯式循環(huán)。
import numpy as np
p = np.array([[ 275.5, 244.2, -27.3],
[ 153.2, 184.3, -0.3]])
def connect(points, n_points):
p1, p2 = points
diff = p2 - p1
t = np.linspace(0, 1, n_points+2)[1:-1]
return p1[np.newaxis, :] + t[:, np.newaxis] * diff[np.newaxis, :]
print(connect(p, n_points=4))
# [[251.04 232.22 -21.9 ]
# [226.58 220.24 -16.5 ]
# [202.12 208.26 -11.1 ]
# [177.66 196.28 -5.7 ]]

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超6個(gè)贊
也許我在這里誤解了一些東西,但你不能只創(chuàng)建一個(gè)函數(shù)(就像你已經(jīng)為一個(gè)點(diǎn)所做的那樣)然后根據(jù)你想要多少點(diǎn)來創(chuàng)建一個(gè)點(diǎn)列表?
我的意思是 2 點(diǎn)之間是無限數(shù)量的其他點(diǎn),所以你必須定義一個(gè)數(shù)字或直接使用函數(shù),它描述了點(diǎn)的位置。
import numpy as np
p = np.array([[ 275.5, 244.2, -27.3],
[ 153.2, 184.3, -0.3]])
def gen_line(p, n):
points = []
stepsize = 1/n
for t in np.arange(0,1,stepsize):
x = (p[1,0]-p[0,0])
y = (p[1,1]-p[0,1])
z = (p[1,2]-p[0,2])
px = p[0,0]
py = p[0,1]
pz = p[0,2]
x3 = px + t*x
y3 = py + t*y
z3 = pz + t*z
points.append([x3,y3,z3])
return points
# generates list of 30k points
gen_line(p, 30000)
添加回答
舉報(bào)