| 查看: 1609 | 回复: 0 | ||
asunshan银虫 (著名写手)
|
[求助]
求助:::module中子程序与函数调用
|
|
!!!在调用module中的subroutine bezier_curve时 !!!!!为什么函数ab和函数bezier_control如果调研两次就会出现问题!!! !!!编译时包若如下: Error 1 error LNK2019: unresolved external symbol _AB referenced in function _FUN_SUM_mp_BEZIER_CURVE Source1.obj Error 2 error LNK2019: unresolved external symbol _BEZIER_CONTROL referenced in function _FUN_SUM_mp_BEZIER_CURVE Source1.obj module fun_sum implicit none real(8)::pz0,pz1,pz2,pz3,pz4 real(8)::pr0,pr1,pr2,pr3,pr4 real(8)::k1,k2,r1,r2,c1,c2 real(8)::a,b real(8)::ti real(8)::z(0:50),r(0:50) integer::i integer::point_num=50 real(8)::co_rz,co_p2 contains !!!subroutine计算曲线上坐标 subroutine bezier_curve(t,zi,ri)!注意参数之中有数组元素,考虑如何书写语法 implicit none real(8)::t,zi,ri !real,external::zuobiao_co !real,external::bezier_control !real,external::ab !real,external::mid_point pz0=-19.21 pz4=23.78407 pr0=68.046 pr4=170.615 k1=0.5 k2=30.0 r1=300.0 r2=5000.0 c1=0.1 c2=-0.5 !计算控制点和的坐标 co_rz=zuobiao_co(pr0,pr4,pz0,pz4,k1,k2) pz1=pz0+c1*(co_rz-pz0) pr1=pr0+c1*(k2*co_rz+pr4-pr0-k2*pz4) pz3=pz4+c2*(pz4-co_rz) pr3=pr4+c2*(k2*pz4-k2*co_rz) !计算控制点的坐标 a=ab(pz0,pz1,pr0,pr1,r1) !!!为什么function_ab和function_bezier_control如果调研两次就会出现问题!!! b=ab(pz3,pz4,pr3,pr4,r2) co_p2=mid_point(pz0,pz1,pz3,pz4,pr0,pr1,pr3,pr4) pz2=((pz1-pz0)*b-(pz4-pz3)*a)/co_p2 pr2=((pr1-pr0)*b-(pr4-pr3)*a)/co_p2 !计算贝塞尔曲线上从起点到终点的个点的坐标 zi=bezier_control(pz0,pz1,pz2,pz3,pz4,t) !!!为什么function_ab和function_bezier_control如果调研两次就会出现问题!!! ri=bezier_control(pr0,pr1,pr2,pr3,pr4,t) end subroutine !!!计算控制点,中常见的部分 real function zuobiao_co(r0,r4,z0,z4,ki,kj) implicit none real(8)::r0,r4,z0,z4 real(8)::ki,kj zuobiao_co=(r4-r0+ki*z0-kj*z4)/(ki-kj) return end function !!!计算控制点的坐标 real function mid_point(z0,z1,z3,z4,r0,r1,r3,r4) implicit none real(8)::z0,z1,z3,z4,r0,r1,r3,r4 mid_point=(z1-z0)*(r4-r3)-(z4-z3)*(r1-r0) return end function !!!曲线上坐标点计算公式 real function bezier_control(p0,p1,p2,p3,p4,t)!注意参数之中有数组元素,考虑如何书写语法 implicit none real(8)::p0,p1,p2,p3,p4 real(8)::t bezier_control=p0*((1-t)**4)+4*p1*t*((1-t)**3)+6*p2*(t**2)*((1-t)**2)+4*p3*(t**3)*(1-t)+p4*(t**4) return end function !!!计算系数a,b real function ab(zi,zj,ri,rj,r) implicit none real(8)::zi,zj,ri,rj,r ab=zi*rj-zj*ri-(4*((zj-zi)**2.0+(rj-ri)**2.0)**1.5)/(3.0*r) return end function end module fun_sum !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!主程序 program bezier !use number use fun_sum implicit none character(len=20)::filename="shroud.txt" integer,parameter::fileid=10 open(fileid, file=filename) write(fileid,"(2X'编号',4X'z坐标',7X'r坐标')" ![]() write(*,"(2X'编号',4X'z坐标',7X'r坐标')" ![]() do i=0,point_num ti=real(i)/real(point_num) call bezier_curve(ti,z(i),r(i)) write(fileid,"(I5,2X,F10.5,2X,F10.5,2X)" i,z(i),r(i)write(*,"(I5,2X,F10.5,2X,F10.5,2X)" i,z(i),r(i)end do pause end program |
» 猜你喜欢
论文终于录用啦!满足毕业条件了
已经有22人回复
不自信的我
已经有5人回复
磺酰氟产物,毕不了业了!
已经有4人回复
投稿Elsevier的杂志(返修),总是在选择OA和subscription界面被踢皮球
已经有8人回复








回复此楼