function [erg_matrix] = footrot_neu(alpha,ausschnitt,mask,off_zeil,off_spalt,arcsec)

alpha = alpha * pi /180;

[iline,isamp] = size(ausschnitt);
ausschnitt2 = ausschnitt';
ibuf = ausschnitt2(:);

[mline,msamp] = size(mask);
osamp = msamp;
oline = mline;

for i = 1 : oline;
    y0 = i - oline/2 - 0.5;
    
    x0 = (1:osamp) - osamp/2 - 0.5;
       
    x1 =  (x0 * cos(alpha) + y0 * sin(alpha)) * (0.1/arcsec) + isamp/2 + 0.5; 
    y1 = (-x0 * sin(alpha) + y0 * cos(alpha)) * (0.1/arcsec) + iline/2 + 0.5;

    d = calculate_ivalue_neu(x1,y1,ibuf,isamp,iline,off_zeil,off_spalt);

    erg_matrix(i,:) = d;
end
% -------------------------------------------------------------------------
function [value] = calculate_ivalue_neu(x1,y1,ibuf,isamp,iline,off_zeil,off_spalt)

x1 = x1 + off_spalt;
y1 = y1 + off_zeil;
x_0 = floor(x1);
y_0 = floor(y1);
v = zeros(4,length(x1));

if all(x_0>=0) && all(x_0<=isamp) && all(y_0>=0) && all(y_0<=iline)

    k = x_0+(y_0-1)*isamp; 
   
    v(1,:) = ibuf(k);
    
    ind_x = x_0 < isamp & x_0 > 0;
    v(2,ind_x) = ibuf(k(ind_x)+1);
    v(2,~ind_x) = v(1,k(~ind_x)); 
      
    ind_y = y_0 < iline & y_0 > 0;
    v(3,ind_y) = ibuf(k(ind_y)+isamp);
    v(3,~ind_y) = v(1,~ind_y);
    
    ind_xy = ind_x.*ind_y;
    v(4,ind_xy) = ibuf(k(ind_xy)+isamp+1);
    v(4,~ind_x) = v(3,~ind_x);
    v(4,~ind_y) = v(2,~ind_y);
 else
      disp('Ausschnitt zu klein!')
 end

dx = x1 - x_0; %- 0.5;   %%% Distance to v0 pixel center  warum 0.5?????
dy = y1 - y_0; %- 0.5;

value = calc_bi_neu(v,dx,dy);
% -------------------------------------------------------------------------
function wert = calc_bi_neu(v,dx,dy)

% Initialisieren
wert = zeros(size(dx));
d0 = wert;
d1 = wert;
d2 = wert;
d3 = wert;

% Fehler abfangen
ind = any(v==999999);
wert(ind)=999999;

% Logische Indizes anlegen
ind_dx = dx < 0;
ind_dy = dy < 0;

% d0, d1, d2, d3 anlegen (Vektoren!)
d0(ind_dx&ind_dy)=dx(ind_dx&ind_dy).*dy(ind_dx&ind_dy);
d1(ind_dx&ind_dy)=(1+dx(ind_dx&ind_dy)).*abs(dy(ind_dx&ind_dy));
d2(ind_dx&ind_dy)=abs(dx(ind_dx&ind_dy)).*(1+dy(ind_dx&ind_dy));
d3(ind_dx&ind_dy)=(1+dx(ind_dx&ind_dy)).*(1+dy(ind_dx&ind_dy));

d0(ind_dx&~ind_dy)=abs(dx(ind_dx&~ind_dy)).*(1-dy(ind_dx&~ind_dy));
d1(ind_dx&~ind_dy)=(1.0+dx(ind_dx&~ind_dy)).*(1-dy(ind_dx&~ind_dy));
d2(ind_dx&~ind_dy)=abs(dx(ind_dx&~ind_dy)).*dy(ind_dx&~ind_dy);
d3(ind_dx&~ind_dy)=(1.0+dx(ind_dx&~ind_dy)).*dy(ind_dx&~ind_dy);

d0(~ind_dx&ind_dy)=(1-dx(~ind_dx&ind_dy)).*abs(dy(~ind_dx&ind_dy));
d1(~ind_dx&ind_dy)=dx(~ind_dx&ind_dy).*abs(dy(~ind_dx&ind_dy));
d2(~ind_dx&ind_dy)=(1-dx(~ind_dx&ind_dy)).*(1.0+dy(~ind_dx&ind_dy));
d3(~ind_dx&ind_dy)=dx(~ind_dx&ind_dy).*(1.0+dy(~ind_dx&ind_dy));

d0(~ind_dx&~ind_dy)=(1.0-dx(~ind_dx&~ind_dy)).*(1.0-dy(~ind_dx&~ind_dy));
d1(~ind_dx&~ind_dy)=dx(~ind_dx&~ind_dy).*(1.0-dy(~ind_dx&~ind_dy));
d2(~ind_dx&~ind_dy)=(1.0-dx(~ind_dx&~ind_dy)).*dy(~ind_dx&~ind_dy);
d3(~ind_dx&~ind_dy)=dx(~ind_dx&~ind_dy).*dy(~ind_dx&~ind_dy);

% wert berechnen
wert(~ind) = v(1,~ind).*d0(~ind) + v(2,~ind).*d1(~ind) + ...
             v(3,~ind).*d2(~ind) + v(4,~ind).*d3(~ind);
