① 如何計算曲線的長度
對於一條連續的、光滑的曲線,根據定積分的幾何意義,很容易計算曲線與x軸所圍成的區域的面積,但如何計算曲線的長度呢?
1.直角坐標曲線曲線f(x)為一條在區間[a,b]上連續且光滑的曲線,如圖1所示。
(1)曲線根據變化分段演算法擴展閱讀:
曲線長度計算
對於任意的多元函數,在任意的一點有切向量a,則此條曲線的長度即為<a,a>,即a*a;其物戚鋒顯性公式為 L(t) = ∫(a,b) √∑仔做(dxi/dt)^2 dt, 在一元函數中有 L(t) = ∫ √ (f'(x))^2 + 1 dt
參考資料來源:網路-曲線長計算公式
② 曲線長度計算公式是什麼
曲線長度計算公式是∫(dx+dy)^1/2dt。曲線是動點運動時,方向連續變化所成的線,也可以想像成彎曲的波狀線,任何一根連續的線條都稱為曲線,包括直線、折線、線段、圓弧等,曲線可以作為數學名詞的同時,又可特指和虛人體的線條。
曲線長度的計算
長度是一維空間的度量,為點到點的距離。通常我們所說的長度都是「直線長度」即在同一直線上測量不同點之間的距離,從一點移動到另一點有無數條路徑,其中路徑最短的是直線,其它路徑軌跡都是曲線。
「直線長度」是兩點之間的直線距離,可以直接測量(用直線尺規做為參照標准進行度量),「曲線長度」是兩點之間的曲線距離,與曲率此棚納有關(不同曲線曲率不同,沒有固定度量的參照標准),曲率固定的曲線與直線之間存在比例關系,可以用「直森沒線距離」表達「曲線距離」。
③ 怎麼用演算法分類曲線,python
#!/usr/bin/envpython#-*-coding:掘段utf-8-*-########################Info:CurveSimplify#Version1.0#Author:AlexPan#Date:2017-07-11#########################DataTypeuintType=np.uint8
floatType=np.float32##-----------------------------------------------------------------------------------##GetDistanceBetweenpointand[line_start-line_end]LinedefgetPoint2LineDistance(point,line_start,line_end):
#Exception
ifnotisinstance(point,np.ndarray)ornotisinstance(line_start,np.ndarray)ornotisinstance(line_end,np.ndarray):raiseTypeError('AllpointsMUSTbenumpy.ndarray!')elifpoint.ndim!=1orpoint.shape!=line_start.shapeorpoint.shape!=line_end.shape:raiseValueError('!')elif(line_start==line_end).all():raiseException('line_startistheSAMEas亮伍line_end!'判鍵譽)returnnp.sqrt(np.sum(np.square(point-line_start))-np.square(np.sum((line_end-line_start)*(point-line_start)))/np.sum(np.square(line_end-line_start),dtype=floatType))##-----------------------------------------------------------------------------------##Constrcuctnp.linspaceArraybetweenraw_array[index_start]andraw_array[index_end]defgetLinspaceArray(raw_array,index_start,index_end):
#Exception
ifnotisinstance(raw_array,np.ndarray):raiseTypeError('raw_arrayMUSTbenumpy.ndarray!')elifindex_start<0orindex_end>raw_array.shape[0]orindex_start>index_end:raiseValueError('index_startorindex_endINVALID!')#ReconstructArraybynp.linspaceBasedonkeyIndexes
linspaceArray=np.linspace(raw_array[index_start][0],raw_array[index_end][0],num=index_end-index_start+1,endpoint=True,dtype=floatType)foriinxrange(1,raw_array.shape[1]):
linspaceArray=np.row_stack((linspaceArray,np.linspace(raw_array[index_start][i],raw_array[index_end][i],num=index_end-index_start+1,endpoint=True,dtype=floatType)))returnnp.transpose(linspaceArray)##-----------------------------------------------------------------------------------##(array_A,array_B):
#Exception
ifnotisinstance(array_A,np.ndarray)ornotisinstance(array_B,np.ndarray):raiseTypeError('array_Aandarray_BMUSTbenumpy.ndarray!')elifarray_A.shape!=array_B.shape:raiseValueError('array_Aandarray_BdimensionsNOTmatched!')#Vector
ifarray_A.ndim==array_B.ndim==1:returnnp.sqrt(np.sum(np.square(array_A-array_B)))#Array
error_array=array_A-array_B
error_list=[np.sqrt(np.sum(np.square(error)))forerrorinerror_array]returnfloat(sum(error_list))/len(error_list)##-----------------------------------------------------------------------------------##(poses_array,max_key=10,error_threshold=0.05):
#Exception
ifnotisinstance(poses_array,np.ndarray):raiseTypeError('poses_arrayMUSTbenumpy.ndarray!')#Initialize
N_poses,M_poses=poses_array.shape
keyIndexes=[0,N_poses-1]
reconstructArray=getLinspaceArray(raw_array=poses_array,index_start=keyIndexes[0],index_end=keyIndexes[-1])#Divide
flagContinue=True
whileflagContinue:
keyIndexes.sort()
keyDeltas=[(keyIndexes[i],keyIndexes[i+1])foriinxrange(len(keyIndexes)-1)]forkeyStart,keyEndinkeyDeltas:
distanceList=[getPoint2LineDistance(point=poses_array[i],line_start=poses_array[keyStart],line_end=poses_array[keyEnd])foriinxrange(keyStart+1,keyEnd)]
keyNew=keyStart+distanceList.index(max(distanceList))+1
keyIndexes.append(keyNew)#Reconstruct[keyStart-keyNew]&[keyNew-keyEnd]
reconstructArray[keyStart:keyNew+1]=getLinspaceArray(raw_array=poses_array,index_start=keyStart,index_end=keyNew)
reconstructArray[keyNew:keyEnd+1]=getLinspaceArray(raw_array=poses_array,index_start=keyNew,index_end=keyEnd)
reconstructError=computeReconstructError(poses_array,reconstructArray)#PrintScreen
printcolored('keyNum:','magenta'),len(keyIndexes)print'recError:',colored(str(reconstructError),'white')#ipdb.set_trace()
#EndCondition:KeyNumorReconstructError
iflen(keyIndexes)==max_keyorreconstructError<error_threshold:
flagContinue=False
break
keyIndexes.sort()returnkeyIndexes,reconstructError
④ 曲線要素的計算公式是什麼
根據給的要素,核算切線長、曲線長等,然後推算出各主點的里兄茄程,根據交點的坐標可以算出方位角,然後可以推算出直緩點的坐標,緩和曲線段就根據偏角法求出偏角和弦長,求出坐標增量,根據前面的點推算就可以了。
帶緩和曲線的圓曲線的主元素及計算公式:
切線長 Th = q+(R+p)·tan(α/2)
曲線羨派察長 Lh = 2l0+R·(α-2β0)·π/180°
外矢距 Eh = (R+p)·sec(α/2)-R
切線加長 q = l0/2-l03/(240R2)
圓曲線相對切線內移量 p = l02/(24R)
(4)曲線根據變化分段演算法擴展閱讀:
曲線要素,道路工程術語 ;是曲線的幾個技術指標:如半徑、緩和曲線、轉角、圓曲線長、平曲線長、切線長、外距、羨冊切曲差、曲線的主點(變坡點)樁號。
曲線要素廣泛應用於道路橋梁設計、施工測量中。曲線要素又分為平曲線要素、豎曲線要素。
圓曲線各要素計算公式:
T=Rtan(A÷2)
L=π÷180(RA)
E0=R÷Cos(A÷2) -R
Q=2T-L
⑤ 請問如何將一條曲線進行分段線性化,有什麼matlab函數,直接用線性插值行嗎
matlab中有分段線性插值函數
假如曲線表達式為y=1/(1+x^2)
具體畫圖為
x=-5:1:5;
y=1./(1+x.^2);
x0=-5:0.05:5;
y1=interp1(x,y,x0,'linear');%求分段線性插值函數在x0上的值
plot(x0,y1,'.');%分段線性插值圖像
legend('分段線性插值曲線')
⑥ 求教:matlab中怎麼樣進行曲線分段擬合
對於分段曲線的函數擬合,可以按下列步驟來進行。
步驟一、根據已知的二維數據xi、yi,用繪圖函數plot(x,y,'k*'),繪出其散點圖。
步驟二、根據散點圖,判斷分段緩禪曲線的分段區間,同時判斷每個分段區野睜間內的散點符合某個數學模型。
步驟三、根據分段區間,分別用matlab的擬合工具箱的擬合函數,去擬合其數學模型的系數。
步驟四、根據擬合後的數學模型的數值和已知的散點值作對比,判斷擬合的數學模型是否合理,一般可以用決定系數R²來判斷,當R²≈1,可以認為擬合是合理的。
matlab常用擾脊塵的函數有,regress(線性函數),nlinfit,lsqnonlin,lsqnonlin(非線性函數),GM(離散型非線性函數)等等。
⑦ arcgis 曲線等距離分段
開啟編輯,選中這條線,在Editor工具條左側下拉框中找到split就可以了,這個汪頌工具可以根據距離、比例猛陵悄及等分都可以,在Into euqal parts裡面輸入20就可以了。
此方法對普通線、Arc、貝塞爾曲線都是可以的枝渣。