Blob Blame History Raw
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Matrix</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/prettify.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrint();"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.52 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id=Content><div class="CSection"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="Matrix"></a>Matrix</h1><div class=CBody><p>Group: Affine Matrix</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#Matrix" >Matrix</a></td><td class=SDescription>Group: Affine Matrix</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#gdAffineApplyToPointF" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">gdAffineApplyToPointF</a></td><td class=SDescription>Applies an affine transformation to a point (floating point gdPointF)</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#gdAffineInvert" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">gdAffineInvert</a></td><td class=SDescription>Find the inverse of an affine transformation.</td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#gdAffineFlip" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">gdAffineFlip</a></td><td class=SDescription>Flip an affine transformation horizontally or vertically.</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#gdAffineConcat" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">gdAffineConcat</a></td><td class=SDescription>Concat (Multiply) two affine transformation matrices.</td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#gdAffineIdentity" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">gdAffineIdentity</a></td><td class=SDescription>Set up the identity matrix.</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#gdAffineScale" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">gdAffineScale</a></td><td class=SDescription>Set up a scaling matrix.</td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#gdAffineRotate" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">gdAffineRotate</a></td><td class=SDescription>Set up a rotation affine transform.</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#gdAffineShearHorizontal" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">gdAffineShearHorizontal</a></td><td class=SDescription>Set up a horizontal shearing matrix || becomes \\.</td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#gdAffineShearVertical" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">gdAffineShearVertical</a></td><td class=SDescription>Set up a vertical shearing matrix, columns are untouched.</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#gdAffineTranslate" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">gdAffineTranslate</a></td><td class=SDescription>Set up a translation matrix.</td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#gdAffineRectilinear" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">gdAffineRectilinear</a></td><td class=SDescription>Determines whether the affine transformation is axis aligned. </td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#gdAffineEqual" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">gdAffineEqual</a></td><td class=SDescription>Determines whether two affine transformations are equal. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Functions"></a>Functions</h3></div></div>

<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="gdAffineApplyToPointF"></a>gdAffineApplyToPointF</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>int gdAffineApplyToPointF (</td><td class="PTypePrefix  prettyprint " nowrap></td><td class="PType  prettyprint " nowrap>gdPointFPtr&nbsp;</td><td class="PParameter  prettyprint " nowrap>dst,</td></tr><tr><td></td><td class="PTypePrefix  prettyprint " nowrap>const&nbsp;</td><td class="PType  prettyprint " nowrap>gdPointFPtr&nbsp;</td><td class="PParameter  prettyprint " nowrap>src,</td></tr><tr><td></td><td class="PTypePrefix  prettyprint " nowrap>const&nbsp;</td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>affine[6]</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Applies an affine transformation to a point (floating point gdPointF)</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>dst</td><td class=CDLDescription>Where to store the resulting point</td></tr><tr><td class=CDLEntry>affine</td><td class=CDLDescription>Source Point</td></tr><tr><td class=CDLEntry>flip_horz</td><td class=CDLDescription>affine matrix</td></tr></table><h4 class=CHeading>Returns</h4><p>GD_TRUE if the affine is rectilinear or GD_FALSE</p></div></div></div>

<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="gdAffineInvert"></a>gdAffineInvert</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>int gdAffineInvert (</td><td class="PTypePrefix  prettyprint " nowrap></td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>dst[6],</td></tr><tr><td></td><td class="PTypePrefix  prettyprint " nowrap>const&nbsp;</td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>src[6]</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Find the inverse of an affine transformation.</p><p>All non-degenerate affine transforms are invertible.&nbsp; Applying the inverted matrix will restore the original values.&nbsp; Multiplying &lt;src&gt; by &lt;dst&gt; (commutative) will return the identity affine (rounding error possible).</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>dst</td><td class=CDLDescription>Where to store the resulting affine transform</td></tr><tr><td class=CDLEntry>src_affine</td><td class=CDLDescription>Original affine matrix</td></tr><tr><td class=CDLEntry>flip_horz</td><td class=CDLDescription>Whether or not to flip horizontally</td></tr><tr><td class=CDLEntry>flip_vert</td><td class=CDLDescription>Whether or not to flip vertically</td></tr></table><h4 class=CHeading>See also</h4><p><a href="#gdAffineIdentity" class=LFunction id=link13 onMouseOver="ShowTip(event, 'tt5', 'link13')" onMouseOut="HideTip('tt5')">gdAffineIdentity</a></p><h4 class=CHeading>Returns</h4><p>GD_TRUE if the affine is rectilinear or GD_FALSE</p></div></div></div>

<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="gdAffineFlip"></a>gdAffineFlip</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>int gdAffineFlip (</td><td class="PTypePrefix  prettyprint " nowrap></td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>dst[6],</td></tr><tr><td></td><td class="PTypePrefix  prettyprint " nowrap>const&nbsp;</td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>src[6],</td></tr><tr><td></td><td class="PTypePrefix  prettyprint " nowrap>const&nbsp;</td><td class="PType  prettyprint " nowrap>int&nbsp;</td><td class="PParameter  prettyprint " nowrap>flip_h,</td></tr><tr><td></td><td class="PTypePrefix  prettyprint " nowrap>const&nbsp;</td><td class="PType  prettyprint " nowrap>int&nbsp;</td><td class="PParameter  prettyprint " nowrap>flip_v</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Flip an affine transformation horizontally or vertically.</p><p>Flips the affine transform, giving GD_FALSE for &lt;flip_horz&gt; and &lt;flip_vert&gt; will clone the affine matrix.&nbsp; GD_TRUE for both will copy a 180° rotation.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>dst</td><td class=CDLDescription>Where to store the resulting affine transform</td></tr><tr><td class=CDLEntry>src_affine</td><td class=CDLDescription>Original affine matrix</td></tr><tr><td class=CDLEntry>flip_h</td><td class=CDLDescription>Whether or not to flip horizontally</td></tr><tr><td class=CDLEntry>flip_v</td><td class=CDLDescription>Whether or not to flip vertically</td></tr></table><h4 class=CHeading>Returns</h4><p>GD_TRUE on success or GD_FALSE</p></div></div></div>

<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="gdAffineConcat"></a>gdAffineConcat</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>int gdAffineConcat (</td><td class="PTypePrefix  prettyprint " nowrap></td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>dst[6],</td></tr><tr><td></td><td class="PTypePrefix  prettyprint " nowrap>const&nbsp;</td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>m1[6],</td></tr><tr><td></td><td class="PTypePrefix  prettyprint " nowrap>const&nbsp;</td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>m2[6]</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Concat (Multiply) two affine transformation matrices.</p><p>Concats two affine transforms together, i.e. the result will be the equivalent of doing first the transformation m1 and then m2.&nbsp; All parameters can be the same matrix (safe to call using the same array for all three arguments).</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>dst</td><td class=CDLDescription>Where to store the resulting affine transform</td></tr><tr><td class=CDLEntry>m1</td><td class=CDLDescription>First affine matrix</td></tr><tr><td class=CDLEntry>m2</td><td class=CDLDescription>Second affine matrix</td></tr></table><h4 class=CHeading>Returns</h4><p>GD_TRUE on success or GD_FALSE</p></div></div></div>

<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="gdAffineIdentity"></a>gdAffineIdentity</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>int gdAffineIdentity (</td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>dst[6]</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Set up the identity matrix.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>dst</td><td class=CDLDescription>Where to store the resulting affine transform</td></tr></table><h4 class=CHeading>Returns</h4><p>GD_TRUE on success or GD_FALSE</p></div></div></div>

<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="gdAffineScale"></a>gdAffineScale</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>int gdAffineScale (</td><td class="PTypePrefix  prettyprint " nowrap></td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>dst[6],</td></tr><tr><td></td><td class="PTypePrefix  prettyprint " nowrap>const&nbsp;</td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>scale_x,</td></tr><tr><td></td><td class="PTypePrefix  prettyprint " nowrap>const&nbsp;</td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>scale_y</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Set up a scaling matrix.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>scale_x</td><td class=CDLDescription>X scale factor</td></tr><tr><td class=CDLEntry>scale_y</td><td class=CDLDescription>Y scale factor</td></tr></table><h4 class=CHeading>Returns</h4><p>GD_TRUE on success or GD_FALSE</p></div></div></div>

<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="gdAffineRotate"></a>gdAffineRotate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>int gdAffineRotate (</td><td class="PTypePrefix  prettyprint " nowrap></td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>dst[6],</td></tr><tr><td></td><td class="PTypePrefix  prettyprint " nowrap>const&nbsp;</td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>angle</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Set up a rotation affine transform.</p><p>Like the other angle in libGD, in which increasing y moves downward, this is a counterclockwise rotation.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>dst</td><td class=CDLDescription>Where to store the resulting affine transform</td></tr><tr><td class=CDLEntry>angle</td><td class=CDLDescription>Rotation angle in degrees</td></tr></table><h4 class=CHeading>Returns</h4><p>GD_TRUE on success or GD_FALSE</p></div></div></div>

<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="gdAffineShearHorizontal"></a>gdAffineShearHorizontal</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>int gdAffineShearHorizontal(</td><td class="PTypePrefix  prettyprint " nowrap></td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>dst[6],</td></tr><tr><td></td><td class="PTypePrefix  prettyprint " nowrap>const&nbsp;</td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>angle</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Set up a horizontal shearing matrix || becomes \\.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>dst</td><td class=CDLDescription>Where to store the resulting affine transform</td></tr><tr><td class=CDLEntry>angle</td><td class=CDLDescription>Shear angle in degrees</td></tr></table><h4 class=CHeading>Returns</h4><p>GD_TRUE on success or GD_FALSE</p></div></div></div>

<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="gdAffineShearVertical"></a>gdAffineShearVertical</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>int gdAffineShearVertical(</td><td class="PTypePrefix  prettyprint " nowrap></td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>dst[6],</td></tr><tr><td></td><td class="PTypePrefix  prettyprint " nowrap>const&nbsp;</td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>angle</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Set up a vertical shearing matrix, columns are untouched.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>dst</td><td class=CDLDescription>Where to store the resulting affine transform</td></tr><tr><td class=CDLEntry>angle</td><td class=CDLDescription>Shear angle in degrees</td></tr></table><h4 class=CHeading>Returns</h4><p>GD_TRUE on success or GD_FALSE</p></div></div></div>

<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="gdAffineTranslate"></a>gdAffineTranslate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>int gdAffineTranslate (</td><td class="PTypePrefix  prettyprint " nowrap></td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>dst[6],</td></tr><tr><td></td><td class="PTypePrefix  prettyprint " nowrap>const&nbsp;</td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>offset_x,</td></tr><tr><td></td><td class="PTypePrefix  prettyprint " nowrap>const&nbsp;</td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>offset_y</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Set up a translation matrix.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>dst</td><td class=CDLDescription>Where to store the resulting affine transform</td></tr><tr><td class=CDLEntry>offset_x</td><td class=CDLDescription>Horizontal translation amount</td></tr><tr><td class=CDLEntry>offset_y</td><td class=CDLDescription>Vertical translation amount</td></tr></table><h4 class=CHeading>Returns</h4><p>GD_TRUE on success or GD_FALSE</p></div></div></div>

<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="gdAffineRectilinear"></a>gdAffineRectilinear</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>int gdAffineRectilinear (</td><td class="PTypePrefix  prettyprint " nowrap>const&nbsp;</td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>m[6]</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Determines whether the affine transformation is axis aligned.&nbsp; A tolerance has been implemented using GD_EPSILON.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>m</td><td class=CDLDescription>The affine transformation</td></tr></table><h4 class=CHeading>Returns</h4><p>GD_TRUE if the affine is rectilinear or GD_FALSE</p></div></div></div>

<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="gdAffineEqual"></a>gdAffineEqual</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>int gdAffineEqual (</td><td class="PTypePrefix  prettyprint " nowrap>const&nbsp;</td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>m1[6],</td></tr><tr><td></td><td class="PTypePrefix  prettyprint " nowrap>const&nbsp;</td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>m2[6]</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Determines whether two affine transformations are equal.&nbsp; A tolerance has been implemented using GD_EPSILON.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>m1</td><td class=CDLDescription>The first affine transformation</td></tr><tr><td class=CDLEntry>m2</td><td class=CDLDescription>The first affine transformation</td></tr></table><h4 class=CHeading>Returns</h4><p>GD_TRUE on success or GD_FALSE</p></div></div></div>

</div><!--Content-->


<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MFile><a href="preamble-txt.html">About LibGD 2.<wbr>3.0-dev</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Image Formats</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="gd_bmp-c.html">BMP IO</a></div></div><div class=MEntry><div class=MFile><a href="gd_gd-c.html">GD IO</a></div></div><div class=MEntry><div class=MFile><a href="gd_gd2-c.html">GD2 IO</a></div></div><div class=MEntry><div class=MFile><a href="gd_gif_in-c.html">GIF Input</a></div></div><div class=MEntry><div class=MFile><a href="gd_gif_out-c.html">GIF Output</a></div></div><div class=MEntry><div class=MFile><a href="gd_jpeg-c.html">JPEG IO</a></div></div><div class=MEntry><div class=MFile><a href="gd_png-c.html">PNG IO</a></div></div><div class=MEntry><div class=MFile><a href="gd_tga-c.html">TGA Input</a></div></div><div class=MEntry><div class=MFile><a href="gd_tiff-c.html">TIFF IO</a></div></div><div class=MEntry><div class=MFile><a href="gd_wbmp-c.html">WBMP IO</a></div></div><div class=MEntry><div class=MFile><a href="gd_webp-c.html">WebP IO</a></div></div><div class=MEntry><div class=MFile><a href="gd_xbm-c.html">XBM IO</a></div></div><div class=MEntry><div class=MFile><a href="gdxpm-c.html">XPM Input</a></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gd_topal-c.html">Color Quantization</a></div></div><div class=MEntry><div class=MFile><a href="gd_crop-c.html">Cropping</a></div></div><div class=MEntry><div class=MFile><a href="gdft-c.html">FreeType font rendering</a></div></div><div class=MEntry><div class=MFile><a href="gd-c.html">gd.c</a></div></div><div class=MEntry><div class=MFile><a href="gd-h.html">gd.h</a></div></div><div class=MEntry><div class=MFile><a href="gd_filename-c.html">gd_filename.c</a></div></div><div class=MEntry><div class=MFile><a href="gd_interpolation-c.html">gd_interpolation.c</a></div></div><div class=MEntry><div class=MFile><a href="gd_io-h.html">gd_io.h</a></div></div><div class=MEntry><div class=MFile><a href="gd_io_dp-c.html">gd_io_dp.c</a></div></div><div class=MEntry><div class=MFile><a href="gd_ss-c.html">gd_ss.c</a></div></div><div class=MEntry><div class=MFile><a href="gd_version-c.html">gd_version.c</a></div></div><div class=MEntry><div class=MFile><a href="gd_color_map-c.html">gdColorMapLookup</a></div></div><div class=MEntry><div class=MFile><a href="gdhelpers-c.html">gdFree</a></div></div><div class=MEntry><div class=MFile><a href="gdfx-c.html">gdfx.c</a></div></div><div class=MEntry><div class=MFile><a href="gd_color_match-c.html">gdImageColorMatch</a></div></div><div class=MEntry><div class=MFile><a href="gd_nnquant-c.html">gdImageNeuQuant</a></div></div><div class=MEntry><div class=MFile><a href="gd_io_file-c.html">gdNewFileCtx</a></div></div><div class=MEntry><div class=MFile><a href="gd_io_ss-c.html">gdNewSSCtx</a></div></div><div class=MEntry><div class=MFile><a href="gd_filter-c.html">Image Filters</a></div></div><div class=MEntry><div class=MFile><a href="license-txt.html">License</a></div></div><div class=MEntry><div class=MFile id=MSelected>Matrix</div></div><div class=MEntry><div class=MFile><a href="gd_transform-c.html">Transformations</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Built-in Fonts</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="gdfontg-c.html">Giant Font</a></div></div><div class=MEntry><div class=MFile><a href="gdfontl-c.html">Large Font</a></div></div><div class=MEntry><div class=MFile><a href="gdfontmb-c.html">Medium Bold Font</a></div></div><div class=MEntry><div class=MFile><a href="gdfonts-c.html">Small Font</a></div></div><div class=MEntry><div class=MFile><a href="gdfontt-c.html">Tiny Font</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Index</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MIndex><a href="../index/Constants.html">Constants</a></div></div><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Macros.html">Macros</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Types.html">Types</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Constants">Constants</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Macros">Macros</option><option value="Types">Types</option></select></div><script language=JavaScript><!--
HideAllBut([], 4);// --></script></div><!--Menu-->



<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>int gdAffineApplyToPointF (</td><td class="PTypePrefix  prettyprint " nowrap></td><td class="PType  prettyprint " nowrap>gdPointFPtr&nbsp;</td><td class="PParameter  prettyprint " nowrap>dst,</td></tr><tr><td></td><td class="PTypePrefix  prettyprint " nowrap>const&nbsp;</td><td class="PType  prettyprint " nowrap>gdPointFPtr&nbsp;</td><td class="PParameter  prettyprint " nowrap>src,</td></tr><tr><td></td><td class="PTypePrefix  prettyprint " nowrap>const&nbsp;</td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>affine[6]</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Applies an affine transformation to a point (floating point gdPointF)</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>int gdAffineInvert (</td><td class="PTypePrefix  prettyprint " nowrap></td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>dst[6],</td></tr><tr><td></td><td class="PTypePrefix  prettyprint " nowrap>const&nbsp;</td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>src[6]</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Find the inverse of an affine transformation.</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>int gdAffineFlip (</td><td class="PTypePrefix  prettyprint " nowrap></td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>dst[6],</td></tr><tr><td></td><td class="PTypePrefix  prettyprint " nowrap>const&nbsp;</td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>src[6],</td></tr><tr><td></td><td class="PTypePrefix  prettyprint " nowrap>const&nbsp;</td><td class="PType  prettyprint " nowrap>int&nbsp;</td><td class="PParameter  prettyprint " nowrap>flip_h,</td></tr><tr><td></td><td class="PTypePrefix  prettyprint " nowrap>const&nbsp;</td><td class="PType  prettyprint " nowrap>int&nbsp;</td><td class="PParameter  prettyprint " nowrap>flip_v</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Flip an affine transformation horizontally or vertically.</div></div><div class=CToolTip id="tt4"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>int gdAffineConcat (</td><td class="PTypePrefix  prettyprint " nowrap></td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>dst[6],</td></tr><tr><td></td><td class="PTypePrefix  prettyprint " nowrap>const&nbsp;</td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>m1[6],</td></tr><tr><td></td><td class="PTypePrefix  prettyprint " nowrap>const&nbsp;</td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>m2[6]</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Concat (Multiply) two affine transformation matrices.</div></div><div class=CToolTip id="tt5"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>int gdAffineIdentity (</td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>dst[6]</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Set up the identity matrix.</div></div><div class=CToolTip id="tt6"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>int gdAffineScale (</td><td class="PTypePrefix  prettyprint " nowrap></td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>dst[6],</td></tr><tr><td></td><td class="PTypePrefix  prettyprint " nowrap>const&nbsp;</td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>scale_x,</td></tr><tr><td></td><td class="PTypePrefix  prettyprint " nowrap>const&nbsp;</td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>scale_y</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Set up a scaling matrix.</div></div><div class=CToolTip id="tt7"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>int gdAffineRotate (</td><td class="PTypePrefix  prettyprint " nowrap></td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>dst[6],</td></tr><tr><td></td><td class="PTypePrefix  prettyprint " nowrap>const&nbsp;</td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>angle</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Set up a rotation affine transform.</div></div><div class=CToolTip id="tt8"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>int gdAffineShearHorizontal(</td><td class="PTypePrefix  prettyprint " nowrap></td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>dst[6],</td></tr><tr><td></td><td class="PTypePrefix  prettyprint " nowrap>const&nbsp;</td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>angle</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Set up a horizontal shearing matrix || becomes \\.</div></div><div class=CToolTip id="tt9"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>int gdAffineShearVertical(</td><td class="PTypePrefix  prettyprint " nowrap></td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>dst[6],</td></tr><tr><td></td><td class="PTypePrefix  prettyprint " nowrap>const&nbsp;</td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>angle</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Set up a vertical shearing matrix, columns are untouched.</div></div><div class=CToolTip id="tt10"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>int gdAffineTranslate (</td><td class="PTypePrefix  prettyprint " nowrap></td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>dst[6],</td></tr><tr><td></td><td class="PTypePrefix  prettyprint " nowrap>const&nbsp;</td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>offset_x,</td></tr><tr><td></td><td class="PTypePrefix  prettyprint " nowrap>const&nbsp;</td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>offset_y</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Set up a translation matrix.</div></div><div class=CToolTip id="tt11"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>int gdAffineRectilinear (</td><td class="PTypePrefix  prettyprint " nowrap>const&nbsp;</td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>m[6]</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Determines whether the affine transformation is axis aligned. </div></div><div class=CToolTip id="tt12"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>int gdAffineEqual (</td><td class="PTypePrefix  prettyprint " nowrap>const&nbsp;</td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>m1[6],</td></tr><tr><td></td><td class="PTypePrefix  prettyprint " nowrap>const&nbsp;</td><td class="PType  prettyprint " nowrap>double&nbsp;</td><td class="PParameter  prettyprint " nowrap>m2[6]</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Determines whether two affine transformations are equal. </div></div><!--END_ND_TOOLTIPS-->




<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>