안녕하세요, 다시 논리적 인 친구! 이것이 상당히 관련된 질문이므로 제발 저를 참아주십시오! 나는 두 가지 특성을 이해할 수 있었다고 생각한다. - 나는 두 개의 루프가 필요하다. 나는 작동하지 않는 것처럼 보인다 ... 첫째로; 가변 롤러 (1) .ink는 잉크 값을 포함하는 (12x1) 벡터입니다. 이 프로그램은 각 연결부에서 롤러 사이의 잉크를 동일하게 공유합니다. 나는 특정 타임 스텝에서만 롤러 (2)와 상호 작용하는 롤러 (1)를 얻으려고 시도하고있다. 잉크는 매 회전마다 한번, 즉 nTimesSteps = nBins_max의 각 배수로 한번 전달되어야한다. 잉크는 시스템이 회전 할 때 롤러 (1) .inch로 다시 전달되어서는 안됩니다. 회전 당 1 회만 시스템에 잉크를 주입해야하며 뒤쪽을 꺼내지 않아야합니다. 현재 나는 roller (1) .ink = ones하지만 테스트 용으로 만 설정했습니다. 나는 정말로 여기에서 붙이게된다! 둘째로; 그 이유는 시뮬레이션이 끝나면 인쇄 된 이미지의 형태로 잉크를 제거하기를 원하기 때문입니다. 이미지는 내 시스템의 마지막 롤러에있는 잉크의 반사가되어야하며이 값의 절반은 마지막 롤러에서 제거되어야하며 각 회전마다 시스템에서 꺼내야합니다. 마지막 롤러에 남아있는 잉크는 다음 회전을 위해 시스템에서 재활용 및 '재분할'되어야합니다. 그래서 ... 나는이 모든 것들을 할 필요가있는 루프 시작 라인 86 주위에 있다고 생각합니다. 다만,matlab에 간헐적 인 루프
For k = 1:nTimeSteps
While nTimesSteps = mod(nTimeSteps, nBins_max) == 0 % This should only output when nTimeSteps is a whole multiple of nBins_max i.e. one full revolution
‘Give me the ink on each segment at each time step in a matrix’
End
averageAmountOfInk에 대한 출력은 내가 정말 평균이 필요하지 않습니다를 제외하고이 데이터를 반환하고자하는 정확한 형식은 다음과 같습니다 의사에서 간헐적에 대한에 공급 내가 좋아하는 뭔가를하려고했는데 각 순간의 실제 가치 누군가가 현재 무엇을보고 관심이 있다면 아래의 전체 코드를 게시합니다
For m = 1:nTimeSteps
For n = 1:N
Rollers(m,n) = rollers(n).ink’;
End
End
: 내가 좋아하는이 사용하여 뭔가를 다시 만들려고 할 때 나는 차원 불일치 점점 오류를 유지한다. 마지막에는 별도의 파일로 저장해야하는 기능이 있습니다. 몇 가지 질문을 여러 번 게시했지만 상당히 까다로운 문제임을 잘 알고 있으며 인터넷을 통해 내 의도를 파악하기가 어렵습니다. 프로그래밍 기술이 부족하다는 것에 대해 누구나 아이디어/조언/일반적인 모욕이 있다면 답장을 보내 주시기 바랍니다!
%% Simple roller train
% # Single forme roller
% # Ink film thickness = 1 micron
clc
clear all
clf
% # Initial state
C = [0,70; % # Roller centres (x, y)
10,70;
21,61;
11,48;
21,34;
27,16;
0,0
];
R = [5.6,4.42,9.8,6.65,10.59,8.4,23]; % # Roller radii (r)
% # Direction of rotation (clockwise = -1, anticlockwise = 1)
rotDir = [1,-1,1,-1,1,-1,1]';
N = numel(R); % # Amount of rollers
% # Find connected rollers
isconn = @(m, n)(sum(([1, -1] * C([m, n], :)).^2)...
-sum(R([m, n])).^2 < eps);
[Y, X] = meshgrid(1:N, 1:N);
conn = reshape(arrayfun(isconn, X(:), Y(:)), N, N) - eye(N);
% # Number of bins for biggest roller
nBins_max = 50;
nBins = round(nBins_max*R/max(R))';
% # Initialize roller struct
rollers = struct('position',{}','ink',{}','connections',{}',...
'rotDirection',{}');
% # Initialise matrices for roller properties
for ii = 1:N
rollers(ii).ink = zeros(1,nBins(ii));
rollers(ii).rotDirection = rotDir(ii);
rollers(ii).connections = zeros(1,nBins(ii));
rollers(ii).position = 1:nBins(ii);
end
for ii = 1:N
for jj = 1:N
if(ii~=jj)
if(conn(ii,jj) == 1)
connInd = getConnectionIndex(C,ii,jj,nBins(ii));
rollers(ii).connections(connInd) = jj;
end
end
end
end
% # Initialize averageAmountOfInk and calculate initial distribution
nTimeSteps = 1*nBins_max;
averageAmountOfInk = zeros(nTimeSteps,N);
inkPerSeg = zeros(nTimeSteps,N);
for ii = 1:N
averageAmountOfInk(1,ii) = mean(rollers(ii).ink);
end
% # Iterate through timesteps
for tt = 1:nTimeSteps
rollers(1).ink = ones(1,nBins(1));
% # Rotate all rollers
for ii = 1:N
rollers(ii).ink(:) = ...
circshift(rollers(ii).ink(:),rollers(ii).rotDirection);
end
% # Update all roller-connections
for ii = 1:N
for jj = 1:nBins(ii)
if(rollers(ii).connections(jj) ~= 0)
index1 = rollers(ii).connections(jj);
index2 = find(ii == rollers(index1).connections);
ink1 = rollers(ii).ink(jj);
ink2 = rollers(index1).ink(index2);
rollers(ii).ink(jj) = (ink1+ink2)/2;
rollers(index1).ink(index2) = (ink1+ink2)/2;
end
end
end
% # Calculate average amount of ink on each roller
for ii = 1:N
averageAmountOfInk(tt,ii) = sum(rollers(ii).ink);
end
end
image(5:20) = (rollers(7).ink(5:20))./2;
inkPerSeg1 = [rollers(1).ink]';
inkPerSeg2 = [rollers(2).ink]';
inkPerSeg3 = [rollers(3).ink]';
inkPerSeg4 = [rollers(4).ink]';
inkPerSeg5 = [rollers(5).ink]';
inkPerSeg6 = [rollers(6).ink]';
inkPerSeg7 = [rollers(7).ink]';
제안 해 주셔서 감사합니다. 나는 실제로 (:) 이전 연산자에서 성공하지 않고 여기에 제안한 양식에서 그것을 사용하려고 사실 (:) 연산자 알고있다. 나는 그것이하려고하는 것의 절반 만 달성 할 것이라고 생각합니다. 즉, 잉크를 사용하지 않으면 시스템이이 롤러를 무시할 수있는 방법이 필요합니다. 귀하의 관심과 제안, 특히 단순함에 감사드립니다. '찾기'는 코드가 작동하면 코드를 스트림 라이닝하는 데 시간을 보냅니다. 제안 된대로 질문을 편집했습니다. 나무에 작은 개간을하기를 바랍니다! 감사합니다. – richyo1000