Are you looking for:
http://www.w3.org/TR/SVG/implnote.html#ArcParameterizationAlternatives
If it is then a conversion routine written in JAVA is:
ExtendedGeneralPath.java
in the Batik source.  I wrote one in JavaScript based on it.
Bruce

--- In svg-developers@yahoogroups.com, yannick.bochatay@... wrote:
>
> Hi,
> I try to write a function to update points of a path from a transformation 
> matrix. It's all ok except for elliptical arcs : 
> I can't find the correct coefficients for r1 r2 and angle.
> Is it simplier to approximate arcs with bezier curves, like the 
> normalizedPathSegList property would do (but not implemented yet) ?
> I wrote an example at http://jsfiddle.net/s32LX/, but I've put the code below 
> anyway.
> Best regards,
> 
> Yannick Bochatay
> http://ybochatay.fr
> 
> 
> 
> 
> SVGPathElement.prototype.mtx2attrs = function(mtx) {
>                 
>   var seg,letter,point,pt={},
>   angle = Math.atan2(mtx.b, mtx.a),
>   svg = this.ownerSVGElement,
>   list = this.pathSegList,
>   i=0, N = list.numberOfItems;
>   
>  /* this.rel2abs();  function that change relative paths to absolute */
> 
>   for (;i<N;i++) {    
>        seg = list.getItem(i);
>        letter = seg.pathSegTypeAsLetter;
>                     
>         ['','1','2'].forEach(function(ind) {
>             
>             if (seg['x'+ind] === undefined && seg['y'+ind] === undefined) { 
> return; }
> 
>             if (seg['x'+ind] !== undefined) { pt['x'+ind] = seg['x'+ind]; }
>             if (seg['y'+ind] !== undefined) { pt['y'+ind] = seg['y'+ind]; }
> 
>             
>             var point = svg.createSVGPoint();
>             point.x = pt['x'+ind]; point.y = pt['y'+ind];
>             point = point.matrixTransform(mtx);
>             
>             seg['x'+ind] = point.x;
>             seg['y'+ind] = point.y;
>          });
>                     
>        if (angle!==0 && (letter === 'H' || letter === 'V')) {
>             this.pathSegList.replaceItem( 
> this.createSVGPathSegLinetoAbs(seg.x,seg.y) , i );
>        }
>        else if (letter === 'A') {
>            /*what to do in that case ??
>            seg.r1 = ?
>            seg.r2 = ?
>            seg.angle+= angle ?
>            */
>        }
>     }
> };
>




------------------------------------

-----
To unsubscribe send a message to: svg-developers-unsubscr...@yahoogroups.com
-or-
visit http://groups.yahoo.com/group/svg-developers and click "edit my 
membership"
----Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/svg-developers/

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/svg-developers/join
    (Yahoo! ID required)

<*> To change settings via email:
    svg-developers-dig...@yahoogroups.com 
    svg-developers-fullfeatu...@yahoogroups.com

<*> To unsubscribe from this group, send an email to:
    svg-developers-unsubscr...@yahoogroups.com

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/

Reply via email to