<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: graphic code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Sun, 27 Jul 2008 01:36:43 GMT</pubDate>
    <description>DZone Snippets: graphic code</description>
    <item>
      <title>Langton's Ant in Python</title>
      <link>http://snippets.dzone.com/posts/show/5143</link>
      <description>The following code simulates &lt;a href="http://en.wikipedia.org/wiki/Langton's_ant"&gt;Langton's Ant&lt;/a&gt; using Python and PyGame.&lt;br /&gt;&lt;br /&gt;A full explanation is given &lt;a href="http://compprog.wordpress.com/2008/02/15/langtons-ant/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#************************************************&lt;br /&gt;# Rules of the game&lt;br /&gt;#	1. If the ant is on a black square, it turns&lt;br /&gt;#		right 90 and moves forward one unit&lt;br /&gt;#	2. If the ant is on a white square, it turns&lt;br /&gt;# 		left 90 and moves forward one unit&lt;br /&gt;#	3. When the ant leaves a square, it inverts&lt;br /&gt;#		colour&lt;br /&gt;#&lt;br /&gt;# SEE: http://mathworld.wolfram.com/LangtonsAnt.html&lt;br /&gt;#************************************************&lt;br /&gt;&lt;br /&gt;import sys, pygame&lt;br /&gt;from pygame.locals import *&lt;br /&gt;import time&lt;br /&gt;&lt;br /&gt;dirs = (&lt;br /&gt;		(-1, 0),&lt;br /&gt;		(0, 1),&lt;br /&gt;		(1, 0),&lt;br /&gt;		(0, -1)&lt;br /&gt;		)&lt;br /&gt;&lt;br /&gt;cellSize = 12 # size in pixels of the board (4 pixels are used to draw the grid)&lt;br /&gt;numCells = 64 # length of the side of the board&lt;br /&gt;background = 0, 0, 0 # background colour; black here&lt;br /&gt;foreground = 23, 23, 23 # foreground colour; the grid's colour; dark gray here&lt;br /&gt;textcol = 177, 177, 177 # the colour of the step display in the upper left of the screen&lt;br /&gt;antwalk = 44, 88, 44 # the ant's trail; greenish here&lt;br /&gt;antant = 222, 44, 44 # the ant's colour; red here&lt;br /&gt;fps = 1.0 / 40 # time between steps; 1.0 / 40 means 40 steps per second&lt;br /&gt;&lt;br /&gt;def main():&lt;br /&gt;	pygame.init()&lt;br /&gt;&lt;br /&gt;	size = width, height = numCells * cellSize, numCells * cellSize&lt;br /&gt;&lt;br /&gt;	pygame.display.set_caption("Langton's Ant")&lt;br /&gt;&lt;br /&gt;	screen = pygame.display.set_mode(size) # Screen is now an object representing the window in which we paint&lt;br /&gt;	screen.fill(background)&lt;br /&gt;	pygame.display.flip() # IMPORTANT: No changes are displayed until this function gets called&lt;br /&gt;&lt;br /&gt;	for i in xrange(1, numCells):&lt;br /&gt;		pygame.draw.line(screen, foreground, (i * cellSize, 1), (i * cellSize, numCells * cellSize), 2)&lt;br /&gt;		pygame.draw.line(screen, foreground, (1, i * cellSize), (numCells * cellSize, i * cellSize), 2)&lt;br /&gt;	pygame.display.flip() # IMPORTANT: No changes are displayed until this function gets called&lt;br /&gt;&lt;br /&gt;	font = pygame.font.Font(None, 36)&lt;br /&gt;&lt;br /&gt;	antx, anty = numCells / 2, numCells / 2&lt;br /&gt;	antdir = 0&lt;br /&gt;	board = [[False] * numCells for e in xrange(numCells)]&lt;br /&gt;&lt;br /&gt;	step = 1&lt;br /&gt;	pause = False&lt;br /&gt;	while True:&lt;br /&gt;		for event in pygame.event.get():&lt;br /&gt;				if event.type == QUIT:&lt;br /&gt;					return&lt;br /&gt;				elif event.type == KEYUP:&lt;br /&gt;					if event.key == 32: # If space pressed, pause or unpause&lt;br /&gt;						pause = not pause&lt;br /&gt;					elif event.key == 115:&lt;br /&gt;						pygame.image.save(screen, "Step%d.tga" % (step))&lt;br /&gt;&lt;br /&gt;		if pause:&lt;br /&gt;			time.sleep(fps)&lt;br /&gt;			continue&lt;br /&gt;&lt;br /&gt;		text = font.render("%d " % (step), True, textcol, background)&lt;br /&gt;		screen.blit(text, (10, 10))&lt;br /&gt;		&lt;br /&gt;		if board[antx][anty]:&lt;br /&gt;			board[antx][anty] = False # See rule 3&lt;br /&gt;			screen.fill(background, pygame.Rect(antx * cellSize + 1, anty * cellSize + 1, cellSize - 2, cellSize - 2))&lt;br /&gt;			antdir = (antdir + 1) % 4 # See rule 1&lt;br /&gt;		else:&lt;br /&gt;			board[antx][anty] = True # See rule 3&lt;br /&gt;			screen.fill(antwalk, pygame.Rect(antx * cellSize + 1, anty * cellSize + 1, cellSize - 2, cellSize - 2))&lt;br /&gt;			antdir = (antdir + 3) % 4 # See rule 2&lt;br /&gt;&lt;br /&gt;		antx = (antx + dirs[antdir][0]) % numCells&lt;br /&gt;		anty = (anty + dirs[antdir][1]) % numCells&lt;br /&gt;&lt;br /&gt;		# The current square (i.e. the ant) is painted a different colour&lt;br /&gt;		screen.fill(antant, pygame.Rect(antx * cellSize + 1, anty * cellSize + 1, cellSize -2, cellSize -2))&lt;br /&gt;&lt;br /&gt;		pygame.display.flip() # IMPORTANT: No changes are displayed until this function gets called&lt;br /&gt;&lt;br /&gt;		step += 1&lt;br /&gt;		time.sleep(fps)&lt;br /&gt;&lt;br /&gt;if __name__ == "__main__":&lt;br /&gt;	main()&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 15 Feb 2008 12:53:39 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5143</guid>
      <author>scvalex (Alexandru Scvortov)</author>
    </item>
    <item>
      <title>dynamic rails img headers</title>
      <link>http://snippets.dzone.com/posts/show/4737</link>
      <description>// description of your code here&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;find views -name [a-z]\*rhtml | xargs -n1 grep -H "@page_title" | grep -v "&lt;%" | sed "s/\@page_title = //" | sed "s/rhtml/png/" | sed "s:views/::" | sed "s:/:_:g" | sed "s:^:public/images/beta/headers/hdr_:" | sed "s/  //g"&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Tue, 06 Nov 2007 00:52:30 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4737</guid>
      <author>jm3 (john manoogian III)</author>
    </item>
    <item>
      <title>Wave Plotter //Pascal Class</title>
      <link>http://snippets.dzone.com/posts/show/2201</link>
      <description>A wave plotter component that is able to draw sin, poly and squared lines, I used this in a osciloscope xD&lt;br /&gt;&lt;br /&gt;I didn't liked this code, but the draw part (TWaveShape.paint) is looking cool, I used the same "X" coord to draw the 3 kinds of lines :)&lt;br /&gt;&lt;br /&gt;I mean:&lt;br /&gt;&lt;br /&gt;loop(x){&lt;br /&gt;  case waveType of&lt;br /&gt;    wtSin: y := lala;&lt;br /&gt;    wtPoly: y := lele;&lt;br /&gt;    wtSqr: y := lili;&lt;br /&gt;  end;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;unit WavePlotter;&lt;br /&gt;&lt;br /&gt;interface&lt;br /&gt;&lt;br /&gt;uses&lt;br /&gt;  forms, dialogs, SysUtils, Classes, Controls, Graphics;&lt;br /&gt;&lt;br /&gt;const&lt;br /&gt;  PI2 = PI * 2;&lt;br /&gt;&lt;br /&gt;type&lt;br /&gt;  TWaveType = ( wtSqr, wtPoly, wtSin );&lt;br /&gt;&lt;br /&gt;  TWave = class( TPersistent )&lt;br /&gt;  public&lt;br /&gt;    waveType: TWaveType;&lt;br /&gt;    color: TColor;&lt;br /&gt;    offset: integer;&lt;br /&gt;    frequency, amplitude, volts, interval, gain: extended;&lt;br /&gt;&lt;br /&gt;    procedure AssignTo(Dest: TPersistent); override;&lt;br /&gt;  end;&lt;br /&gt;&lt;br /&gt;  TWaveShape = class( TGraphicControl )&lt;br /&gt;  protected&lt;br /&gt;    fWaves: TList;&lt;br /&gt;    fBoxSize: integer;&lt;br /&gt;    fLineColor: TColor;&lt;br /&gt;&lt;br /&gt;    function getWave(const index: integer): TWave;&lt;br /&gt;    procedure setBoxSize(const Value: integer);&lt;br /&gt;&lt;br /&gt;    function getBackgroundColor: TColor;&lt;br /&gt;    procedure setBackgroundColor(const Value: TColor);&lt;br /&gt;    procedure setLineColor(const Value: TColor);&lt;br /&gt;&lt;br /&gt;  public&lt;br /&gt;    constructor create( AOwner: TComponent ); override;&lt;br /&gt;    destructor destroy; override;&lt;br /&gt;&lt;br /&gt;    procedure clear;&lt;br /&gt;    procedure delete( const index: integer );&lt;br /&gt;&lt;br /&gt;    function add: integer;&lt;br /&gt;&lt;br /&gt;    property waves[ const index: integer]: TWave read GetWave;&lt;br /&gt;&lt;br /&gt;  published&lt;br /&gt;    procedure paint; override;&lt;br /&gt;    property boxSize: integer read fBoxSize write setBoxSize;&lt;br /&gt;    property backgroundColor: TColor read getBackgroundColor write setBackgroundColor;&lt;br /&gt;    property lineColor: TColor read fLineColor write setLineColor;&lt;br /&gt;&lt;br /&gt;    //inherited&lt;br /&gt;    //property Canvas;&lt;br /&gt;    property Align;&lt;br /&gt;    property Anchors;&lt;br /&gt;    property Constraints;&lt;br /&gt;    property DragCursor;&lt;br /&gt;    property DragKind;&lt;br /&gt;    property DragMode;&lt;br /&gt;    property Enabled;&lt;br /&gt;    //property Font;&lt;br /&gt;    property ParentColor;&lt;br /&gt;    //property ParentFont;&lt;br /&gt;    property ParentShowHint;&lt;br /&gt;    property PopupMenu;&lt;br /&gt;    property ShowHint;&lt;br /&gt;    property Visible;&lt;br /&gt;    property OnClick;&lt;br /&gt;    property OnContextPopup;&lt;br /&gt;    property OnDblClick;&lt;br /&gt;    property OnDragDrop;&lt;br /&gt;    property OnDragOver;&lt;br /&gt;    property OnEndDock;&lt;br /&gt;    property OnEndDrag;&lt;br /&gt;    property OnMouseDown;&lt;br /&gt;    property OnMouseMove;&lt;br /&gt;    property OnMouseUp;&lt;br /&gt;    property OnStartDock;&lt;br /&gt;    property OnStartDrag;&lt;br /&gt;  end;&lt;br /&gt;&lt;br /&gt;implementation&lt;br /&gt;&lt;br /&gt;function max( const a, b: integer ): integer;&lt;br /&gt;begin&lt;br /&gt;  if a &gt; b then&lt;br /&gt;    result := a&lt;br /&gt;  else&lt;br /&gt;    result := b;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;{ TWaveShape }&lt;br /&gt;&lt;br /&gt;function TWaveShape.add: integer;&lt;br /&gt;begin&lt;br /&gt;  result := fWaves.add( TWave.Create );&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TWaveShape.clear;&lt;br /&gt;begin&lt;br /&gt;  while fWaves.count &gt; 0 do begin&lt;br /&gt;    TWave( fWaves[0] ).free;&lt;br /&gt;    fWaves.delete( 0 );&lt;br /&gt;  end;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;constructor TWaveShape.create(AOwner: TComponent);&lt;br /&gt;begin&lt;br /&gt;  inherited;&lt;br /&gt;  fWaves := TList.create;&lt;br /&gt;  fLineColor := clGray;&lt;br /&gt;  color := clBtnFace;&lt;br /&gt;  fBoxSize := 50;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TWaveShape.delete(const index: integer);&lt;br /&gt;begin&lt;br /&gt;  if ( index &gt; -1 ) and ( index &lt; fWaves.count ) then begin&lt;br /&gt;    TWave( fWaves[index] ).free;&lt;br /&gt;    fWaves.delete( index );&lt;br /&gt;  end;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;destructor TWaveShape.destroy;&lt;br /&gt;begin&lt;br /&gt;  fWaves.free;&lt;br /&gt;  inherited;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;function TWaveShape.getBackgroundColor: TColor;&lt;br /&gt;begin&lt;br /&gt;  result := color;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;function TWaveShape.getWave(const index: integer): TWave;&lt;br /&gt;begin&lt;br /&gt;  result := nil;&lt;br /&gt;  if ( index &gt; -1 ) and ( index &lt; fWaves.count ) then&lt;br /&gt;    result := TWave( fWaves[ index ] );&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TWaveShape.paint;&lt;br /&gt;var&lt;br /&gt;  k, x: integer;&lt;br /&gt;  lastX, lastY: array of integer;&lt;br /&gt;  y: extended;&lt;br /&gt;begin&lt;br /&gt;  if not enabled then&lt;br /&gt;    exit;&lt;br /&gt;  canvas.brush.color := color;&lt;br /&gt;  canvas.fillRect( clientRect );&lt;br /&gt;&lt;br /&gt;  setLength( lastY, fWaves.count );&lt;br /&gt;  setLength( lastX, fWaves.count );&lt;br /&gt;  for k := 0 to high( lastY ) do begin&lt;br /&gt;    lastY[k] := clientHeight div 2 + waves[k].offset;&lt;br /&gt;    lastX[k] := 0;&lt;br /&gt;  end;&lt;br /&gt;&lt;br /&gt;  for x := 0 to max( clientWidth, clientHeight ) do begin&lt;br /&gt;    with canvas do begin&lt;br /&gt;      pen.color := fLineColor;&lt;br /&gt;      pen.width := 1;&lt;br /&gt;      pen.style := psDot;&lt;br /&gt;&lt;br /&gt;      if x mod fBoxSize = 0 then begin&lt;br /&gt;        moveTo( 0, x + trunc( frac( clientHeight / 2 / fBoxSize ) * fBoxSize ) );&lt;br /&gt;        lineTo( clientWidth, x + trunc( frac( clientHeight / 2 / fBoxSize ) * fBoxSize ) );&lt;br /&gt;&lt;br /&gt;        moveTo( x, 0 );&lt;br /&gt;        lineTo( x, clientHeight );&lt;br /&gt;      end;&lt;br /&gt;&lt;br /&gt;      for k := 0 to fWaves.count - 1 do begin&lt;br /&gt;        with waves[k] do begin&lt;br /&gt;          pen.color := color;&lt;br /&gt;          pen.width := 1;&lt;br /&gt;          pen.style := psSolid;&lt;br /&gt;&lt;br /&gt;          y := pi*k + PI2 * x * interval / fBoxSize * frequency;&lt;br /&gt;&lt;br /&gt;          case waveType of&lt;br /&gt;            wtSin:&lt;br /&gt;              y := sin( y );&lt;br /&gt;            wtPoly: begin&lt;br /&gt;              y := frac( y / PI2 );&lt;br /&gt;              if y &lt;= 0.25 then&lt;br /&gt;                y := y / 0.25&lt;br /&gt;              else if y &lt;= 0.75 then&lt;br /&gt;                y := ( -y + 0.5 ) / 0.25&lt;br /&gt;              else&lt;br /&gt;                y := ( y - 1 ) / 0.25;&lt;br /&gt;            end;&lt;br /&gt;            wtSqr: begin&lt;br /&gt;              if frac( y / PI2 ) &lt;= 0.5 then&lt;br /&gt;                y := 1&lt;br /&gt;              else&lt;br /&gt;                y := -1;&lt;br /&gt;            end;&lt;br /&gt;          end;&lt;br /&gt;          y := ( y * ( fBoxSize / volts ) * amplitude * gain ) + clientHeight / 2 + offset;&lt;br /&gt;          moveTo( lastX[k], lastY[k] );&lt;br /&gt;          lastX[k] := x;&lt;br /&gt;          lastY[k] := trunc( y );&lt;br /&gt;          lineTo( x, lastY[k] );&lt;br /&gt;        end;&lt;br /&gt;      end;&lt;br /&gt;    end;&lt;br /&gt;  end;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TWaveShape.setBackgroundColor(const Value: TColor);&lt;br /&gt;begin&lt;br /&gt;  color := Value;&lt;br /&gt;  Invalidate;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TWaveShape.setBoxSize(const Value: integer);&lt;br /&gt;begin&lt;br /&gt;  fBoxSize := Value;&lt;br /&gt;  invalidate;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;procedure TWaveShape.setLineColor(const Value: TColor);&lt;br /&gt;begin&lt;br /&gt;  fLineColor := Value;&lt;br /&gt;  Invalidate;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;{ TWave }&lt;br /&gt;&lt;br /&gt;procedure TWave.AssignTo(Dest: TPersistent);&lt;br /&gt;begin&lt;br /&gt;  if Dest.ClassType &lt;&gt; TWave then&lt;br /&gt;    inherited;&lt;br /&gt;  with TWave( Dest ) do begin&lt;br /&gt;    waveType := self.waveType;&lt;br /&gt;    color := self.color;&lt;br /&gt;    offset := self.offset;&lt;br /&gt;    frequency := self.frequency;&lt;br /&gt;    amplitude := self.amplitude;&lt;br /&gt;    volts := self.volts;&lt;br /&gt;    interval := self.interval;&lt;br /&gt;    gain := self.gain;&lt;br /&gt;  end;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;end.&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Thu, 15 Jun 2006 19:28:29 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2201</guid>
      <author>jonasraoni (Jonas Raoni Soares Silva)</author>
    </item>
  </channel>
</rss>
