나는이 surf
두 차원 기능을 세우고 그림. 내 플롯에 애니메이션을 적용하기 위해 행렬의 z
각 지점 [x,y]
에서 값 을 변경하는 루프가 있습니다 meshgrid
.
p = surf(x, y, z)
frames = 10/1000
for t = 0:frames:10
newZ = updateZVal(someArgs)
set(p, 'ZData', newZ)
이것은 대부분 잘 작동합니다. 그러나 색상 맵은 업데이트되지 않습니다. 기본적으로 원래 z
매트릭스 의 컬러 맵 텍스처는 그대로 유지됩니다. x
- y
변화와 위아래로 비행기로 이동 newZ
하지만, 색상은하지 않습니다.
이 정확한 코드는 Matlab에서 작동하며이 색상 문제를 제외하고 Octave에서 잘 작동합니다.
편집 : 최소 작업 예. 조금 움직이는 가우시안 유형의 것. 색상이 업데이트되지 않는 것을 볼 수 있습니다.
figure();
x_range = [-2:0.2:2];
y_range = [-2:0.2:2];
[x,y] = meshgrid(x_range, y_range);
frames = 500;
z = (x) .* y;
p = surf(x, y, z);
for t = [0:2/frames:2]
z = exp(-((((x-t).^2)/2) + (((y-t).^2)/2)));
set(p, 'ZData', z);
drawnow;
end
tl; dr : 변경
set(p, 'ZData', z);
...에
set(p, 'ZData', z, 'CData', z);
최소한의 작업 예제에 감사드립니다!
색상이 옥타브에서 자동 업데이트되지 않는 것 같은 이유는 matlab에서 surf 객체가라는 추가 속성을 제공하는 것처럼 보이기 때문입니다 cdatamode
. 여기서는 cdata
색상 데이터이고의 기본값은 cdatamode
입니다 auto
. 즉, 자동으로 색상 정보를 업데이트합니다. zdata
변경 되는 경우
안타깝게도 옥타브는이 속성을 제공하지 않으므로 zdata
수동으로 다른 항목으로 설정 한 경우 직접 색상 정보를 수동으로 업데이트해야합니다. 이 단지를 기반으로하기 때문에하지만, z
어쨌든, 당신이해야 할 모든 업데이트입니다 CData
같은 값 ZData
.
분명히 매번 객체를 처음부터 플로팅했다면이 문제가 발생하지 않을 것이지만 애니메이션을 적용하는 것이 훨씬 더 빠르고 매끄 럽기 때문에 ( 사실 어떤 이유로 든 옥타브에서 훨씬 빠름!) 원하는 방식으로 수행하는 것이 좋습니다. 축을 다시 그려야하는 등의 부작용으로 인한 부작용이 발생하지 않기 때문에 이것은 좋은 질문입니다! 감사합니다!
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다