<p>For a right triangle specified by an equation aX + bY &lt;= c  on integers </p>

<p>I want to plot each pixel(*) in the triangle once and only once, in a pseudo-random order, and without storing a list of previously hit points.</p>

<p>I know how to do this with a line segment between 0 and x</p>

<blockquote>
  <p>pick a random point'o' along the line,<br>
     pick 'p' that is relatively prime to x<br>
     repeat for up to x times:     O<sub>next</sub> = (O<sub>cur</sub> + P) MOD x</p>
</blockquote>

<p>To do this for a triangle, I would<br>
1.  Need to count the number of pixels in the triangle sans lists<br>
2.  Map an integer 0..points into a x,y pair that is a valid pixel inside the triangle</p>

<p>I hope any solution could be generalized to pyramids and higher dimensional shapes.  </p>

<p>(*) I use the CG term pixel for the pair of integer points X,Y such that the equation is satisfied. </p>

Since you want to guarantee visiting each pixel once and only once, it's probably better to think in terms of pixels rather than the real triangles.
You can slice the triangles horizontally and get bunch of horizontal
scan lines
. Connect the scan lines together and you have converted your "triangle" into a long line. Apply your point visiting algorithm to your long chain of scan lines.
By the way, this mapping only needs to happen on paper, all you need is a function that can return (x, y) given (t) along the virtual scan line.
Edit: 
To convert two points to a line segment, you can look for
Bresenham's scan conversion
. Once you get the 3 line segments converted into series of points, you can put all points into a bucket and group all points by y. Within the same y-value, sort points by x. The smallest x within a y-value is the begin point of the scan line and the largest x within the y-value is the end point of the scan line. This is called "scan converting triangle". You can find more info if you Google.