Just because it is fun (I don't claim that this is a good way to draw this), using the fact that the surface is ruled):
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\definecolor{startcolor}{named}{red}
\definecolor{endcolor}{named}{blue}
\newcommand\steps{250}
\newcommand\lineAstart{0,0,0}
\newcommand\lineAend{1,0,1}
\newcommand\lineBstart{0,1,1}
\newcommand\lineBend{1,1,0}
\begin{tikzpicture}[x={(-3.5cm,-2cm)},y={(10cm,-1cm)},z={(0,7cm)}]
\draw[->] (0,0) -- (1,0,0);
\draw[->] (0,0) -- (0,1,0);
\draw[->] (0,0) -- (0,0,1);
\foreach \n in {0,1,...,\steps} {
\pgfmathparse{\n/\steps*100}
\let\i\pgfmathresult
\draw[ultra thick,color={startcolor!\i!endcolor}]
($(\lineAstart)!{\n/\steps}!(\lineAend)$) --
($(\lineBstart)!{\n/\steps}!(\lineBend)$);
}
\end{tikzpicture}
\end{document}

More interestingly, one can draw the two families of lines:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc,intersections}
\begin{document}
\tikzset{f1/.style={red}}
\tikzset{f2/.style={blue}}
\newcommand\steps{40}
\begin{tikzpicture}[x={(-3.5cm,-2cm)},y={(10cm,-1cm)},z={(0,7cm)}]
\coordinate (lineAstart) at (1,0,1);
\coordinate (lineAend) at (0,0,0);
\coordinate (lineBstart) at (1,1,0);
\coordinate (lineBend) at (0,1,1);
\draw[->] (0,0) -- (1,0,0);
\draw[->] (0,0) -- (0,1,0);
\draw[->] (0,0) -- (0,0,1);
%
% Draw the first family of lines
%
\draw[name path global={f1l0},name path global={f1l0-short},f1] (lineAstart) -- (lineBstart);
\foreach \n in {1,...,\steps} {
\pgfmathparse{\n/\steps*100}
\let\i\pgfmathresult
\pgfmathtruncatemacro\p{\n-1}
% Create the path of the lines
\edef\optname{name path global={f1l\n}}
\expandafter\path\expandafter[\optname]
($(lineAstart)!{\n/\steps}!(lineAend)$) --
($(lineBstart)!{\n/\steps}!(lineBend)$);
% Draw the correct bits of the lines
\edef\optname{name intersections={of={f1l\n} and f1l\p},name path global={f1l\n-short}}
\expandafter\draw\expandafter[\optname,f1]
(intersection-1) -- ($(lineBstart)!{\n/\steps}!(lineBend)$);
\edef\optname{name intersections={of={f1l\n} and f1l0}}
\expandafter\draw\expandafter[\optname,f1]
($(lineAstart)!{\n/\steps}!(lineAend)$) -- (intersection-1);
}
%
% Draw the second family of lines
%
\foreach \n in {\steps,...,0} {
\pgfmathparse{\n/\steps*100}
\let\i\pgfmathresult
\pgfmathtruncatemacro\p{\n+1}
% Create the paths
\edef\optname{name path global={f2l\n}}
\expandafter\path\expandafter[\optname,shorten <=4pt]
($(lineAstart)!{\n/\steps}!(lineBstart)$) --
($(lineAend)!{\n/\steps}!(lineBend)$);
% Draw the correct bits
\ifnum\n=\steps % handle the first line separately
\draw[f2] (lineBstart) -- (lineBend);
\else
% Note: one should actually find the intersection with the correct line of the first family.
% However, this is rather complicated. The following gives a good approximation when the
% number of lines is high enough.
\edef\optname{name intersections={of={f2l\n} and f2l\p,total=\noexpand\total}}
\expandafter\draw\expandafter[\optname,f2]
\ifnum\total=1
($(lineAstart)!{\n/\steps}!(lineBstart)$) -- (intersection-1);
\else
($(lineAstart)!{\n/\steps}!(lineBstart)$) -- ($(lineAend)!{\n/\steps}!(lineBend)$);
\fi;
\fi
}
\end{tikzpicture}

Or combine the the pictures:

pdftricksand you can give a look at the packagepst-pdf– Alain Matthes Jun 5 '11 at 7:14