⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bresenham_line3d.m

📁 采用3D Bresenham算法在两点间划一直线 % This program is ported to MATLAB from: % B.Pendleton. line3d - 3D Bres
💻 M
字号:
From: <由 Windows Internet Explorer 7 保存>
Subject: 
Date: Thu, 14 Aug 2008 22:33:28 +0800
MIME-Version: 1.0
Content-Type: text/html;
	charset="gb2312"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.mathworks.com/matlabcentral/files/21057/bresenham_line3d.m
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3198

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; charset=3Dgb2312">
<META content=3D"MSHTML 6.00.6000.16674" name=3DGENERATOR></HEAD>
<BODY><PRE>%  Perform 3D Bresenham's algorithm to draw a line between =
Point1
%  and Point2.
%
%  Usage: [X Y Z] =3D bresenham_line3d(P1, P2);
%
%  P1	- vector for Point1, where P1 =3D [x1 y1 z1]
%	  (x1 y1 z1 can only be integer)
%
%  P2	- vector for Point2, where P2 =3D [x2 y2 z2]
%	  (x2 y2 z2 can only be integer)
%
%  X	- a set of x coordinates on Bresenham's line
%  Y	- a set of y coordinates on Bresenham's line
%  Z	- a set of z coordinates on Bresenham's line
%
%  All points in XYZ set (i.e. P(i) =3D [X(i) Y(i) Z(i)]) will =
constitute
%  the Bresenham's line.
%
%  Example:
%	P1 =3D [12 37 6];
%	P2 =3D [46 3 35];
%	[X Y Z] =3D bresenham_line3d(P1, P2);
%	figure; plot3(X,Y,Z,'s','markerface','b');
%
%  This program is ported to MATLAB from:
%  B.Pendleton.  line3d - 3D Bresenham's (a 3D line drawing algorithm)
%  ftp://ftp.isc.org/pub/usenet/comp.sources.unix/volume26/line3d, 1992
%
%  Which is referenced by:
%  Fischer, J., A. del Rio (2004).  A Fast Method for Applying Rigid
%  Transformations to Volume Data, WSCG2004 Conference.
%  http://wscg.zcu.cz/wscg2004/Papers_2004_Short/M19.pdf
%
%  - Jimmy Shen (jimmy@rotman-baycrest.on.ca)
%
function [X,Y,Z] =3D bresenham_line3d(P1, P2)

   x1 =3D P1(1);
   y1 =3D P1(2);
   z1 =3D P1(3);

   x2 =3D P2(1);
   y2 =3D P2(2);
   z2 =3D P2(3);

   dx =3D x2 - x1;
   dy =3D y2 - y1;
   dz =3D z2 - z1;

   ax =3D abs(dx)*2;
   ay =3D abs(dy)*2;
   az =3D abs(dz)*2;

   sx =3D sign(dx);
   sy =3D sign(dy);
   sz =3D sign(dz);

   x =3D x1;
   y =3D y1;
   z =3D z1;
   idx =3D 1;

   if(ax&gt;=3Dmax(ay,az))			% x dominant
      yd =3D ay - ax/2;
      zd =3D az - ax/2;

      while(1)
         X(idx) =3D x;
         Y(idx) =3D y;
         Z(idx) =3D z;
         idx =3D idx + 1;

         if(x =3D=3D x2)		% end
            break;
         end

         if(yd &gt;=3D 0)		% move along y
            y =3D y + sy;
            yd =3D yd - ax;
         end

         if(zd &gt;=3D 0)		% move along z
            z =3D z + sz;
            zd =3D zd - ax;
         end

         x  =3D x  + sx;		% move along x
         yd =3D yd + ay;
         zd =3D zd + az;
      end
   elseif(ay&gt;=3Dmax(ax,az))		% y dominant
      xd =3D ax - ay/2;
      zd =3D az - ay/2;

      while(1)
         X(idx) =3D x;
         Y(idx) =3D y;
         Z(idx) =3D z;
         idx =3D idx + 1;

         if(y =3D=3D y2)		% end
            break;
         end

         if(xd &gt;=3D 0)		% move along x
            x =3D x + sx;
            xd =3D xd - ay;
         end

         if(zd &gt;=3D 0)		% move along z
            z =3D z + sz;
            zd =3D zd - ay;
         end

         y  =3D y  + sy;		% move along y
         xd =3D xd + ax;
         zd =3D zd + az;
      end
   elseif(az&gt;=3Dmax(ax,ay))		% z dominant
      xd =3D ax - az/2;
      yd =3D ay - az/2;

      while(1)
         X(idx) =3D x;
         Y(idx) =3D y;
         Z(idx) =3D z;
         idx =3D idx + 1;

         if(z =3D=3D z2)		% end
            break;
         end

         if(xd &gt;=3D 0)		% move along x
            x =3D x + sx;
            xd =3D xd - az;
         end

         if(yd &gt;=3D 0)		% move along y
            y =3D y + sy;
            yd =3D yd - az;
         end

         z  =3D z  + sz;		% move along z
         xd =3D xd + ax;
         yd =3D yd + ay;
      end
   end

   return;					% bresenham_line3d

</PRE></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -