<div dir="ltr">Things get even more complex if you want the arrow head to bend with the curvature of the path. The only package I know that can do that is MetaPost. See page 42 of:<br><br><a href="http://tug.org/docs/metapost/mpman.pdf">http://tug.org/docs/metapost/mpman.pdf</a><br>
<br>Imho, the source code of MetaFont and MetaPost are great resources for the math involved.<br><br>Regards,<br>Dov<br><br><div class="gmail_quote">On Wed, Nov 24, 2010 at 12:48, Angus Johnson <span dir="ltr">&lt;<a href="mailto:angus@internode.on.net">angus@internode.on.net</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div class="im">On 24/11/2010 8:50 PM, donn wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
On 23/11/2010 19:09, Stefan Salewski wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Can you imagine building an arrow of 3 or more line segments?<br>
</blockquote>
The OP is a question I would like to see answered too. The problem is how to find the three points to define the arrow. If you have a bezier-curve, so the line is some S shape, how do you get the arrow to point along the direction that the curve sort of ends in?<br>

</blockquote>
<br></div>
This isn&#39;t a simple task. What I do in another library is ...<br>
1. flatten the curve (into a series of straight edges)<br>
2. given a specified distance between arrow tip and arrow base,<br>
    shorten the curve by that distance (removing some segments and/or shortening the last)<br>
3. get the angle &#39;a&#39; between the original end and the new end. (I don&#39;t recommend using the angle of the very last straight segment, or the control point, because if the bezier is very curved near the end the arrow base will be no where near where the adjusted line starts.)<br>

4. use the perpendicular of &#39;a&#39; and a specified distance from the base to locate arrow &#39;wings&#39; points.<br>
<br>
Also, I suggest it&#39;d be very helpful to have a couple of basic arrow drawing routines in the library - that returns coords for 3 pointed and 4 pointed arrows of a specified size (ie between tip and base).<br>
eg typedef cairo_path_end_type enum {CAIRO_END_TYPE_START, CAIRO_END_TYPE_END, CAIRO_END_TYPE_BOTH} cairo_path_end_type_t;<br>
cairo_path_t*  cairo_get_3pt_arrow_coords_for_path(cairo_t *cr, double size, cairo_path_end_type_t ends);<br>
<br>
They could be combined with the following couple of functions ...<br>
1. cairo_bool_t cairo_get_point_at_dist_from_path_end(cairo_t *cr, double dist, cairo_path_end_type_t end, double *x, double *y);<br>
2. cairo_bool_t cairo_shorten_path(cairo_t *cr, double dist, cairo_path_end_type_t ends);<div><div></div><div class="h5"><br>
--<br>
cairo mailing list<br>
<a href="mailto:cairo@cairographics.org" target="_blank">cairo@cairographics.org</a><br>
<a href="http://lists.cairographics.org/mailman/listinfo/cairo" target="_blank">http://lists.cairographics.org/mailman/listinfo/cairo</a><br>
</div></div></blockquote></div><br></div>