<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: poly code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Thu, 24 Jul 2008 20:13:35 GMT</pubDate>
    <description>DZone Snippets: poly code</description>
    <item>
      <title>Point Inside a Polygon //JavaScript Function</title>
      <link>http://snippets.dzone.com/posts/show/5295</link>
      <description>&lt;a href="http://jsfromhell.com/math/is-point-in-poly"&gt;&lt;br /&gt;Checks whether a point is inside a polygon.&lt;br /&gt;Adapted from: [http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html]&lt;br /&gt;&lt;br /&gt;[UPDATED CODE AND HELP CAN BE FOUND HERE: Point Inside a Polygon]&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;//+ Jonas Raoni Soares Silva&lt;br /&gt;//@ http://jsfromhell.com/classes/is-point-in-poly [v1.0]&lt;br /&gt;&lt;br /&gt;function isPointInPoly(poly, pt){&lt;br /&gt;	for(var c = false, i = -1, l = poly.length, j = l - 1; ++i &lt; l; j = i)&lt;br /&gt;		((poly[i].y &lt;= pt.y &amp;&amp; pt.y &lt; poly[j].y) || (poly[j].y &lt;= pt.y &amp;&amp; pt.y &lt; poly[i].y))&lt;br /&gt;		&amp;&amp; (pt.x &lt; (poly[j].x - poly[i].x) * (pt.y - poly[i].y) / (poly[j].y - poly[i].y) + poly[i].x)&lt;br /&gt;		&amp;&amp; (c = !c);&lt;br /&gt;	return c;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Example&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;//&lt;![CDATA[&lt;br /&gt;&lt;br /&gt;points = [&lt;br /&gt;	{x: 0, y: 0},&lt;br /&gt;	{x: 0, y: 50},&lt;br /&gt;	{x: 50, y: 10},&lt;br /&gt;	{x: -50, y: -10},&lt;br /&gt;	{x: 0, y: -50},&lt;br /&gt;	{x: 0, y: 0}&lt;br /&gt;];&lt;br /&gt;&lt;br /&gt;alert(isPointInPoly(points, {x: 10, y: 10}) ? "In" : "Out");&lt;br /&gt;&lt;br /&gt;//]]&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;</description>
      <pubDate>Sun, 30 Mar 2008 16:57:56 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5295</guid>
      <author>jonasraoni (Jonas Raoni Soares Silva)</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>
    <item>
      <title>Closest Polyline Point //Javascript Function</title>
      <link>http://snippets.dzone.com/posts/show/670</link>
      <description>&lt;a href="http://jsfromhell.com/math/closest-polyline-point"&gt;&lt;br /&gt;Given a dot and a set of lines, it returns the nearest dot over one of the given lines.&lt;br /&gt;&lt;br /&gt;[UPDATED CODE AND HELP CAN BE FOUND HERE]&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;//+ Jonas Raoni Soares Silva&lt;br /&gt;//@ http://jsfromhell.com/math/closest-polyline-point [v1.0]&lt;br /&gt;&lt;br /&gt;closestPolyLinePoint = function( px, py, x0, y0, x1, y1, etc, etc, etc ){&lt;br /&gt;	function dotLineLength( x, y, x0, y0, x1, y1, o ){&lt;br /&gt;		function lineLength( x, y, x0, y0 ){&lt;br /&gt;			return Math.sqrt( ( x -= x0 ) * x + ( y -= y0 ) * y );&lt;br /&gt;		}&lt;br /&gt;		if( o &amp;&amp; !( o = function( x, y, x0, y0, x1, y1 ){&lt;br /&gt;			if( !( x1 - x0 ) ) return { x: x0, y: y };&lt;br /&gt;			else if( !( y1 - y0 ) ) return { x: x, y: y0 };&lt;br /&gt;			var left, tg = -1 / ( ( y1 - y0 ) / ( x1 - x0 ) );&lt;br /&gt;			return { x: left = ( x1 * ( x * tg - y + y0 ) + x0 * ( x * - tg + y - y1 ) ) / ( tg * ( x1 - x0 ) + y0 - y1 ), y: tg * left - tg * x + y };&lt;br /&gt;		}( x, y, x0, y0, x1, y1 ), o.x &gt;= Math.min( x0, x1 ) &amp;&amp; o.x &lt;= Math.max( x0, x1 ) &amp;&amp; o.y &gt;= Math.min( y0, y1 ) &amp;&amp; o.y &lt;= Math.max( y0, y1 ) ) ){&lt;br /&gt;			var l1 = lineLength( x, y, x0, y0 ), l2 = lineLength( x, y, x1, y1 );&lt;br /&gt;			return l1 &gt; l2 ? l2 : l1;&lt;br /&gt;		}&lt;br /&gt;		else {&lt;br /&gt;			var a = y0 - y1, b = x1 - x0, c = x0 * y1 - y0 * x1;&lt;br /&gt;			return Math.abs( a * x + b * y + c ) / Math.sqrt( a * a + b * b );&lt;br /&gt;		}&lt;br /&gt;	};&lt;br /&gt;	for( var args = [].slice.call( arguments, 0 ), lines = []; args.length &gt; 4; lines[lines.length] = { y1: args.pop(), x1: args.pop(), y0: args.pop(), x0: args.pop() } );&lt;br /&gt;	if( !lines.length )&lt;br /&gt;		return { x: px, y: py };&lt;br /&gt;	var l, i, o = lines[0], lower = { i: 0, l: dotLineLength( px, py, o.x0, o.y0, o.x1, o.y1 ) };&lt;br /&gt;	for( i in lines )&lt;br /&gt;		if( lower.l &gt; ( l = dotLineLength( px, py, ( o = lines[i] ).x0, o.y0, o.x1, o.y1 ) ) )&lt;br /&gt;			lower = { i: i, l: l };&lt;br /&gt;	py = py &lt; Math.min( ( o = lines[lower.i] ).y0, o.y1 ) ? Math.min( o.y0, o.y1 ) : py &gt; Math.max( o.y0, o.y1 ) ? Math.max( o.y0, o.y1 ) : py;&lt;br /&gt;	px = px &lt; Math.min( o.x0, o.x1 ) ? Math.min( o.x0, o.x1 ) : px &gt; Math.max( o.x0, o.x1 ) ? Math.max( o.x0, o.x1 ) : px;&lt;br /&gt;	return Math.abs( o.x0 - o.x1 ) &lt; Math.abs( o.y0 - o.y1 ) ? { x: ( py * ( o.x0 - o.x1 ) - o.x0 * o.y1 + o.y0 * o.x1 ) / ( o.y0 - o.y1 ), y: py }&lt;br /&gt;	: { x: px, y: ( px * ( o.y0 - o.y1 ) - o.y0 * o.x1 + o.x0 * o.y1 ) / ( o.x0 - o.x1 ) };&lt;br /&gt;};&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 09 Sep 2005 04:40:06 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/670</guid>
      <author>jonasraoni (Jonas Raoni Soares Silva)</author>
    </item>
  </channel>
</rss>
