Circle Hell

Bengt Richter bokr at oz.net
Thu Sep 4 13:36:13 EDT 2003


On Thu, 04 Sep 2003 07:55:18 -0700, Talon <talon34 at hotmail.com> (by way of Talon <talon34 at hotmail.com>) wrote:

>Hi all,
>
>I am new to Tk, so please bear with me.  I need someone better at math 
>than me to help me figure this out.  I am drawing multiple arcs on the 
>same circle.  All arcs start at 90 and have varying negative extents 
>(different colors, goes all the way around. Represents a microbial 
>genome). So now that my arcs are drawn, I would would like to draw a 
>line, 25 pixels long that starts on the circle at the endpoint of each 
>of the arcs, and looks like an extension of the radius extending above 
>the circle. Then I would like to print text at the end of this line.  So 
>my question is how do I dynamically calculate the line coordinates?  
>Circle size is fixed, number of arcs and their extents are variable.
>
>Code for drawing arc;
>$x1,$y1 = 25
>$x2,$y2 = 775
>$xcenter = $x2/2 + $x1;
>$ycenter = $y2/2 + $y1;
>
>$canvas->createArc($x1,$y1,$x2,$y2, 
>                   -width=>10,
>                   -outline=>$colors[$color],
>                   -style=>'arc',
>                   -start=>90,
>                   -extent=>-$actual_angle,
>                   -tags=>$myorfs{$key}[1]);
>
>What I have so far to draw lines:
>
>$xstart = (cos($current_arclength)*$radius+$xcenter) /10;
>$ystart = (sin($current_arclength)*$radius+$ycenter) /10;
These look ok except dividing by 10, assuming the units for the angle are ok (degrees vs radians?)
Dividing by 10 seems weird here, so try leaving it out.

>$canvas->createLine($xstart+$xcenter,
>                    $ystart+$ycenter,
>From above, xstart already has xcenter in it, so don't add it again. Same for ycenter.
>                    $xstart+($xstart*0.01)+$xcenter,
>                    $ystart+($ystart*0.01)+$ycenter);
If you want to draw a 25-pixel line, where is the "25"? You just need to resolve the 25
into x and y components and add them to your respective starting points, I would think.
So UIAM the above becomes (giving a name to the 25-pixel length (assuming dimensions are in pixels)

 $tick_length = 25.0;

 $xstart = cos($current_arclength)*$radius+$xcenter;
 $ystart = sin($current_arclength)*$radius+$ycenter;

 $canvas->createLine($xstart,
                     $ystart,
                     $xstart+ cos($current_arclength)*$tick_length,
                     $ystart+ sin($current_arclength)*$tick_length);

>
>This draws an oval of lines, inside the orginal circle, with the line 
>length having sin periodicity around the circle.  Can anyone improve my 
>math so that I can get the lines placed properly with the proper length?
>
>Please email me directly as well as respond to the list. Thanks so much 
>in advance.
>
>--Math Challenged Mark
>
>Mark.Evans.B at bayer.com

HTH

Regards,
Bengt Richter




More information about the Python-list mailing list