Я пытаюсь достичь той же цели, которая получена с последней строкой кода, но с циклом 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