① 如何计算曲线的长度
对于一条连续的、光滑的曲线,根据定积分的几何意义,很容易计算曲线与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、贝塞尔曲线都是可以的枝渣。