在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Python/ Python實(shí)現(xiàn)三維軌跡段面積求解?

Python實(shí)現(xiàn)三維軌跡段面積求解?

需要用Python實(shí)現(xiàn)一個(gè)算法,求解三維空間中兩條軌跡所圍成的面積,具體如下:

clipboard.png

如上所示,兩條軌跡由點(diǎn)序列組成(紅色和黑色軌跡),三維坐標(biāo)可表示為(x,y,t),目的就是要求這兩條軌跡之間所圍成的面積。現(xiàn)在的思路是將求兩條軌跡之間圍城的面積轉(zhuǎn)換為分別求兩條軌跡點(diǎn)構(gòu)成三角形的面積,然后利用海倫公式進(jìn)行面積求解,具體如下:

clipboard.png

但是這樣做有一個(gè)問題,就是兩條軌跡的點(diǎn)序列如何構(gòu)成三角形,在此想問問大家有沒有什么好的方法,或者好的建議,謝謝!(注意:兩條軌跡的點(diǎn)序列個(gè)數(shù)可能是不一樣的,即一條軌跡可能只有3個(gè)點(diǎn),而另一條軌跡有5個(gè)點(diǎn))

回答
編輯回答
浪蕩不羈

兩點(diǎn):三角形是a, b輪流的;軌跡序列可能不等長。

def find_triangle(a, b):
    # 比較軌跡序列長短并交換,方便取起始點(diǎn)
    la, lb = len(a), len(b)
    if la > lb:
        a, b = b, a
        la, lb = lb, la
    # 三角形構(gòu)造,a,b輪流    
    triangles = []
    for i in range(la - 1):
        triangles.append((b[i], a[i], b[i + 1]))
        triangles.append((a[i], b[i + 1], a[i + 1]))
    # 長序列軌跡其他點(diǎn)的三角形構(gòu)造
    more = b[la - 1:]
    for j in range(len(more) - 1):
        triangles.append((more[j], a[la - 1], more[j + 1]))
    return triangles
>>> S1 = ['a1', 'a2', 'a3']
>>> S2 = ['b1', 'b2', 'b3', 'b4', 'b5']
>>> print(find_triangle(S1, S2))
[('b1', 'a1', 'b2'), ('a1', 'b2', 'a2'), ('b2', 'a2', 'b3'), ('a2', 'b3', 'a3'), ('b3', 'a3', 'b4'), ('b4', 'a3', 'b5')]
>>> print(find_triangle(S2, S1))
[('b1', 'a1', 'b2'), ('a1', 'b2', 'a2'), ('b2', 'a2', 'b3'), ('a2', 'b3', 'a3'), ('b3', 'a3', 'b4'), ('b4', 'a3', 'b5')]
2018年8月21日 19:05
編輯回答
還吻

總面積=所有黑底三角形面積+所有紅底三角形面積
重點(diǎn)是湊三角形的三個(gè)點(diǎn)
黑色點(diǎn)編號(hào)為b0~b4
紅色點(diǎn)編號(hào)為r0~r4
黑底三角形三點(diǎn)為 b0 b1 r0,... b3 b4 r3
紅底三角形三點(diǎn)為 r0 r1 r1,... r3 r4 r4
點(diǎn)湊出來了 其他的再繼續(xù)想辦法吧

部分代碼可以寫成這樣

class Point:

__slots__=('x','y','z')
def __init__(self,x,y,z):
    self.x,self.y,self.z=x,y,z

red_point,black_point=list(range(4)),list(range(4))
blacktria=[(i,i+1,j) for i,j in zip(black_point[:4],red_point[:4])]
redtria=[(j,j+1,i+1) for i,j in zip(black_point[:4],red_point[:4])]
print(blacktria,'n',redtria)

blacktria與redtria的內(nèi)容如下:
[(0, 1, 0), (1, 2, 1), (2, 3, 2), (3, 4, 3)]
[(0, 1, 1), (1, 2, 2), (2, 3, 3), (3, 4, 4)]

2018年2月2日 11:13
編輯回答
久不遇

我看了一下,你這個(gè)三角形構(gòu)造是有個(gè)規(guī)律性的,我用一個(gè)偽代碼表示一下兩條軌跡,設(shè)每個(gè)點(diǎn)的坐標(biāo)為:

dot_nt = (x,y,z) # n代表第幾條運(yùn)動(dòng)軌跡,n in (1,2);t代表第幾個(gè)點(diǎn)n in [0,n]

那么對(duì)于軌跡1可以形成:

[dot_10,dot_11,dot_12,...]

對(duì)于軌跡2可以形成:

[dot_20,dot_21,dot_22,...]

然后的話,可以看到一個(gè)

[dot_10,dot_20,dot_11],[dot_11,dot_21,dot_12],[dot_12,dot_22,dot_13],...

這樣的一個(gè)有規(guī)律的數(shù)據(jù),然后根據(jù)這個(gè)規(guī)律就可以用程序圍成一個(gè)三角形了,如果你覺得思路對(duì)的話可以嘗試去實(shí)現(xiàn),我感覺應(yīng)該就是這個(gè)樣子了

2017年2月11日 21:49