|
楼主:
您好!以下是您的《通用工程函数集》中“土的颗粒分析成图”原理:
【' 根据其中采用的算法,进一步增添根据X坐标求Y坐标,或根据Y坐标求X坐标,更切合实际需求
' 这个自定义函数按照Excel的曲线算法(三次贝塞尔分段插值),计算平滑曲线上任意一点的点坐标
'
' Excel的平滑曲线的大致算法是:
' 给出了两组X-Y数值以后,每一对X-Y坐标称为节点,然后在每两个节点之间画出三次贝塞尔曲线(下面简称曲线)
' 贝塞尔曲线的算法网上有很多资源,这里不介绍了,只作简单说明
' 每条曲线都由四个节点开始,计算出四个贝塞尔控制点,然后根据控制点画出唯一一条曲线
' 假设曲线的源数据是节点1,节点2,节点3,节点4(Dot1,Dot2,Dot3,Dot4)
' 那么贝塞尔控制点的计算如下 程序作者: 海底眼(Mr. Dragon Pan)
' Dot2是第一个控制点,也是曲点的起点,Dot3是第四个控制点也是曲线的终点
'
' 第二个控制点的位置是:
' 过第一个控制点(Dot2,起点),与Dot1, Dot3的连线平行,且与Dot2距离为 1/6 * 线段Dot1_Dot3的长度
' 假如是图形的第一段曲线,取节点1,1,2,3进行计算,即 Dot2 = Dot1
' 且第二个控制点与第一控制点距离取 1/3 * |Dot1_Dot3|,而不是1/6 * |Dot1_Dot3|
' 假如 1/2 * |Dot2_Dot3| < 1/6 * |Dot1_Dot3|
' 那么第二个控制点与第一控制点距离取 1/2 * |Dot2_Dot3|,而不是1/6 * |Dot1_Dot3|
'
' 第三个控制点的位置是:
' 过第四个控制点(Dot3,终点),与Dot2, Dot4的连线平行,且与Dot3距离为 1/6 * |Dot2_Dot4|
' 假如是图形的最后一段曲线,取节点Last-2,Last-1,Last,Last进行计算,即 Dot4 = Dot3
' 且第三个控制点与第四控制点距离取 1/3 * |Dot2_Dot4|,而不是1/6 * |Dot2_Dot4|
' 假如 1/2 * |Dot2_Dot3| < 1/6 * |Dot2_Dot4|
' 那么第二个控制点与第一控制点距离取 1/2 * |Dot2_Dot4|,而不是1/6 * |Dot2_Dot4|
'...............................................................................................
' 这个自定义函数的计算流程是
' Step1: 检查输入的X-Y数值是否有错误,如(输入不够三个点,X-Y的数量不一致,起始搜索节点超过范围等等)
' Step2: 从参数指定的节点开始,计算出四个贝塞尔控制点,得到贝塞尔插值多项式方程,
' 然后代入已知的待求数值,看它能不能满足 f(t)=0 有解 (即曲线包含待查数值)
' Step3: 如果 f(t)=0 有解,根据解出来的 t 值计算X-Y坐标,退出程序,否则继续检查下一段曲线
' Step4: 如果所有分段曲线都不包含待查数值,退出程序】
注:根据这种方法做出的图,好像不是很准确啊,关于此问题的一些想法,请看附件图片,希望诸位高手、专家对此问题进行探究…… |
|