我試圖實現與代碼的最後一行獲得的相同目標,但是可以在代碼中看到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