No BSD License  

Highlights from
Skyplot1001

image thumbnail
from Skyplot1001 by Markus Penzkofer
Virtual Planetarium showing stars, the planets, the sun and the moon.

[HorAlign]=horalign(x,y,stol)
function [HorAlign]=horalign(x,y,stol)

% function [HorAlign]=horalign(x,y,stol)
%
% optimize Horizontal Alignment
% by check for identical points
%
% 05.05.04 M.Penzkofer

% check for partners
indC = [];
for i = 1:length(x)
   xG = x(i);
   yG = y(i);
	xI = ones(size(x))*xG;
	yI = ones(size(y))*yG;
   dsG = sqrt((xI(:,1)-x).^2+(yI(:,1)-y).^2);
   dsG(dsG==0) = NaN;
   smin = min(dsG);
   indK = find(dsG==smin);
   if (isempty(indK) == 0 & smin <= stol)
      indC = [indC; i indK(1)];
   end
end

if (isempty(indC) == 1)
   % all align right
   HorAlign = ones(size(x));
else
   % align by partner
	HorAlign = zeros(size(x));
	for i = 1:length(x)
   	[indi,indj] = find(indC == i);
      if (isempty(indi) == 1)
         % align right
      	HorAlign(i) = 1;
      else
         % partner index
         ind1 = find(indj == 1);
         indP = indC(indi(ind1(1)),2);
         if (HorAlign(i) == 0 & HorAlign(indP) == 0)
            if (x(i) < x(indP))
            	% align left and partner right
         		HorAlign(i) = -1;
               HorAlign(indP) = 1;
            else
               % align right and partner left
               HorAlign(i) = 1;
               HorAlign(indP) = -1;
            end
         elseif (HorAlign(i) ~= 0 & HorAlign(indP) == 0)
            % align partner different
            HorAlign(indP) = -1*HorAlign(i);
         elseif (HorAlign(i) == 0 & HorAlign(indP) ~= 0)
            % align different
            HorAlign(i) = -1*HorAlign(indP);
      	end
      end
   end
end

Contact us at files@mathworks.com