程序功能做到已测曲线投影到一个指定平面产生一个新的曲线,程序实现的步骤如下
1.取出曲线所有测量点.
2.投影测量点到指定平面.
3.所有的投影点重新拟合一条新的曲线.
因为测量点数量不定,而拟合关键字不支持高级语句,所以没办法通过CONST/BF^^^^来直接完成拟合,方法是通过产生一个外部的DMI文件,然后在程序中再调用这个DMI文件实现,也是这个程序很有特色的一段,程序如下.
DECL/CHAR,255,TEMP_STRING,LABEL_TEMP,TEMP1,TEMP2,TEMP_CCC
DECL/CHAR,10,PLN_LABEL,GCV_LABEL
$$$$将曲线的测量点取出来,先投影到曲线上,再投影到平面上
M(CURVE_PORJ) = MACRO/GCV_L, PLN_L
DECL/LOCAL, INTGR, NUM_GCV, J, I
NUM_GCV = VALUE/FA(@GCV_L),PTDATA
DECL/LOCAL, DOUBLE, GCV_P[NUM_GCV,6]
DECL/LOCAL, CHAR, 10, TEMP_LABEL
TEMP_CCC = ASSIGN/CONCAT('F(',GCV_L,')')
TEMP_STRING = ASSIGN/CONCAT('CONST/GCURVE,',TEMP_CCC,',BF')
DO/I, 1, NUM_GCV
DO/J, 1, 6
GCV_P[I,J] = OBTAIN/FA(@GCV_L)[I], J+1
ENDDO
TEMP_LABEL = ASSIGN/CONCAT('GPT',STR(I))
F(@TEMP_LABEL) = FEAT/POINT, CART, GCV_P[I,1], GCV_P[I,2], GCV_P[I,3], GCV_P[I,4], GCV_P[I,5], GCV_P[I,6]
FA(@TEMP_LABEL) = FEAT/POINT, CART, GCV_P[I,1], GCV_P[I,2], GCV_P[I,3], GCV_P[I,4], GCV_P[I,5], GCV_P[I,6]
CONST/POINT,F(@TEMP_LABEL),PROJPT,FA(@TEMP_LABEL),F(@GCV_L)
CONST/POINT,F(@TEMP_LABEL),PROJPT,FA(@TEMP_LABEL),F(@PLN_L)
LABEL_TEMP = ASSIGN/CONCAT(',' ,'FA(', TEMP_LABEL,')')
TEMP_STRING = ASSIGN/CONCAT(TEMP_STRING,LABEL_TEMP)
ENDDO
$$$$$$$$$$$$$$ 重新定义理论曲线,使得其向量和投影平面方向一致
DECL/LOCAL, DOUBLE, GCV_PARA[6]
GCV_PARA[1]=OBTAIN/F(@GCV_L),3
GCV_PARA[2]=OBTAIN/F(@GCV_L),4
GCV_PARA[3]=OBTAIN/F(@GCV_L),5
GCV_PARA[4]=OBTAIN/F(@PLN_L),6
GCV_PARA[5]=OBTAIN/F(@PLN_L),7
GCV_PARA[6]=OBTAIN/F(@PLN_L),8
F(@GCV_L)=FEAT/GCURVE,CART,GCV_PARA[1],GCV_PARA[2],GCV_PARA[3],GCV_PARA[4],GCV_PARA[5],GCV_PARA[6]
ENDMAC
TEMPCHAR = PROMPT/TEXT,‘曲线标签名’,EDIT,GCV_LABEL,$
TEXT,‘所投影平面标签名’,EDIT,PLN_LABEL
CALL/M(CURVE_PORJ), GCV_LABEL, PLN_LABEL
TEMP1 = ASSIGN/‘M(TEST) = MACRO/’
TEMP2 = ASSIGN/‘ENDMAC’
DID(AAA) = DEVICE/STOR,‘D:\ProJ_GCV.DMI’
OPEN/DID(AAA),DIRECT,OUTPUT,OVERWR
WRITE/DID(AAA),TEMP1:1
WRITE/DID(AAA),TEMP_STRING:2
WRITE/DID(AAA),TEMP2:3
XTERN
EXTFIL/DMIS,‘D:\ProJ_GCV.DMI’
CALL/EXTERN,DMIS,M(TEST)
ENDXTN
曲线有点特殊,在有曲线投影要求可能软件并没有实现,而曲线投影的通用程序靠自学习是不可能实现的,所以
用高级语言实现了.
RE:
曲线是插值算法,拟合用三次B样条在两个点之间插值,原则上会过所有点.
曲线为二维元素,如果多点不在同一个平面上,会首先选择一个工作平面,将所有点投影到这个平面上,再进行拟合.
你的情况很有可能是多点不在同一个平面上.