這段代碼大致目的是希望通過(guò)初始的點(diǎn)A,點(diǎn)A'及所有的點(diǎn)B坐標(biāo),通過(guò)一個(gè)公式不斷迭代計(jì)算的到所有點(diǎn)B'的坐標(biāo),我用的列表元素表示坐標(biāo)值,報(bào)錯(cuò)后不知道該怎么修改了 剛學(xué)Python,問(wèn)題淺薄,請(qǐng)多指教
代碼如下:
import math
#兩點(diǎn)坐標(biāo)距離公式
def sqrtpowsum(A,B):
return math.sqrt(math.pow(A[0]-B[0],2)+math.pow(A[1]-B[1],2)+math.pow(A[2]-B[2],2))
#型材拉伸量
L0e = 0.1
#初始點(diǎn)A坐標(biāo)
Coordinate_A = [16.6588, 14.0349, 0.0]
#初始點(diǎn)A'坐標(biāo)
Coordinate_A_quote = [16.6588, 14.0349, 300]
#每一輪點(diǎn)B坐標(biāo)
Coordinate_B = [
[16.6603, 14.0594, -4.86946],
[16.6662, 14.1329, -9.72499],
[16.6763, 14.2555, -14.5686]
]
""" ========================
分割線下方內(nèi)容請(qǐng)勿修改
========================
"""
#點(diǎn)A的三個(gè)坐標(biāo)
A_x = Coordinate_A[0]
A_y = Coordinate_A[1]
A_z = Coordinate_A[2]
#點(diǎn)A'的三個(gè)坐標(biāo)
A_quote_x = Coordinate_A_quote[0]
A_quote_y = Coordinate_A_quote[1]
A_quote_z = Coordinate_A_quote[2]
#計(jì)算點(diǎn)B的個(gè)數(shù)
n = len(Coordinate_B)
#該輪點(diǎn)B'的坐標(biāo)
Coordinate_B_quote =[]
for i in range(n):
# 該輪B點(diǎn)的三個(gè)坐標(biāo)
B_x = Coordinate_B[i][0]
B_y = Coordinate_B[i][1]
B_z = Coordinate_B[i][2]
# 計(jì)算L和l
L = sqrtpowsum(Coordinate_A,Coordinate_A_quote) +L0e
l = sqrtpowsum(Coordinate_A,Coordinate_B)
m = L/l
# 計(jì)算該輪點(diǎn)B'的三個(gè)坐標(biāo)
B_quote_x = m*B_x + (1-m)*A_x
B_quote_y = m*B_y + (1-m)*A_y
B_quote_z = m*B_z + (1-m)*A_z
# 該輪點(diǎn)B’的坐標(biāo)
Coordinate_B_quote[0] = B_quote_x
Coordinate_B_quote[1] = B_quote_y
Coordinate_B_quote[2] = B_quote_z
# 迭代
Coordinate_A = Coordinate_B
Coordinate_A_quote = Coordinate_B_quote
# 輸出該輪B'坐標(biāo)
print("B'" + i + "=" + Coordinate_B_quote +"\n")
報(bào)錯(cuò)如下:
Traceback (most recent call last):
File "E:/python code/trace code.py", line 44, in <module>
l = sqrtpowsum(Coordinate_A,Coordinate_B)
File "E:/python code/trace code.py", line 5, in sqrtpowsum
return math.sqrt(math.pow(A[0]-B[0],2)+math.pow(A[1]-B[1],2)+math.pow(A[2]-B[2],2))
TypeError: unsupported operand type(s) for -: 'float' and 'list'
需要迭代計(jì)算的 B 點(diǎn)有好幾百個(gè),如果能優(yōu)化一下就更好了
我改了一下你的代碼如下:
import math
#兩點(diǎn)坐標(biāo)距離公式
def sqrtpowsum(A, B):
return math.sqrt(sum((a-b)**2 for a, b in zip(A, B)))
#型材拉伸量
L0e = 0.1
#初始點(diǎn)A坐標(biāo)
Coordinate_A = [16.6588, 14.0349, 0.0]
#初始點(diǎn)A'坐標(biāo)
Coordinate_A_quote = [16.6588, 14.0349, 300]
#每一輪點(diǎn)B坐標(biāo)
Coordinate_B_lst = [
[16.6603, 14.0594, -4.86946],
[16.6662, 14.1329, -9.72499],
[16.6763, 14.2555, -14.5686]
]
for i, Coordinate_B in enumerate(Coordinate_B_lst):
# 計(jì)算L和l
L = sqrtpowsum(Coordinate_A, Coordinate_A_quote) +L0e
l = sqrtpowsum(Coordinate_A, Coordinate_B)
m = L/l
# 計(jì)算該輪點(diǎn)B'的三個(gè)坐標(biāo)
Coordinate_B_quote = [m*b+(1-m)*a for a, b in zip(Coordinate_A, Coordinate_B)]
# 迭代
Coordinate_A, Coordinate_A_quote = Coordinate_B, Coordinate_B_quote
# 輸出該輪B'坐標(biāo)
print("B'" + str(i) + "=" + str(Coordinate_B_quote) +"\n")
除了寫法上不同,邏輯也不太一樣,有一點(diǎn)我不確定是你的 bug 還是我的誤解, 那就是每一輪用來(lái)計(jì)算 B' 的 A_x, A_y 和 A_z 是原 A 點(diǎn)的座標(biāo)還是各輪迭代造成改變的 A 座標(biāo), 不過(guò)你可以參考看看寫法, 也許會(huì)有一些心得。
我回答過(guò)的問(wèn)題: Python-QA
北大青鳥(niǎo)APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國(guó)家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
北大課工場(chǎng)是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國(guó)家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國(guó)制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級(jí)產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國(guó)職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開(kāi)發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_(kāi)發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫(kù),具有快速界面開(kāi)發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁(yè)制作和網(wǎng)頁(yè)游戲開(kāi)發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開(kāi)發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問(wèn),美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。