我试图实现与代码的最后一行获得的相同目标,但是可以在代码中看到do循环。问题是,当我尝试形成与命令循环像数组表达式的形状不符合Fortran 90
CURV_KVEC%KNOTS(knot)=(/0.d0/)
我得到一个错误
The shapes of the array expressions do not conform.
任何帮助将不胜感激!谢谢。
cdegree=2
count=5
do knot=0,cdegree+count
if (knot.le.cdegree) then
CURV_KVEC%KNOTS(knot)=0.d0
test(knot+1)=0.d0
elseif (knot.ge.count) then
test(knot+1)=1.d0
CURV_KVEC%KNOTS(knot)=1.d0
elseif(nvec.eq.0) then
num=num+1
do kn=1,cdegree
CURV_KVEC%KNOTS(knot+kn-1)=0.5d0 !dble(num)/(dble(count-cdegree-1)/dble(cdegree)+1.d0)
test(knot+kn)=0.5d0 !dble(num)/(dble(count-cdegree-1)/dble(cdegree)+1.d0)
nvec=cdegree-1
enddo
elseif(nvec.ne.0) then
nvec=nvec-1
endif
write(14,*)knot,num,nvec,test(knot+1)
enddo
! CURV_KVEC%KNOTS(0:CURV_KVEC%LENGTH) = (/0.D0,0.D0,0.D0,0.5d0,0.5d0,1.d0,1.d0,1.d0/)
除了在代码示例中注释掉的行有各种值,并非全部为零。所以这个解决方案是不相同的。 –
我终于明白了!问题出在上面可以看到的代码之外。在中间注释的表达式(!dble(num)...等等)给出0.5的值。我评论他们,以检查是否有问题。计算的值是NURBS曲线的结矢量的分量,因此需要根据曲线的度数和控制点的数量进行更新。其实在上面的代码中没有问题。外面只有另一个循环,导致上面的代码被执行两次,有些值在第二次循环之前没有被恢复。非常感谢! – user3288183