From: Ed Redman <redman / accesswave.ca> Subject: tcl/tk translate Date: Wed, 14 Sep 2005 10:56:33 +0900 Message-ID: <pan.2005.09.14.01.51.35.820289 / accesswave.ca> > proc poly'rotate {w item angle} { > set delta [expr {$angle/180.*acos(-1)}] > foreach {x y} [$w coords $item] { > set r [expr {hypot($y,$x)}] > set a [expr {atan2($y,$x)+$delta}] > lappend coords [expr {cos($a)*$r}] [expr {sin($a)*$r}] For example, --------------------------------------------------------------- require 'tk' require 'enumerator' def poly_rotate(citem, angle) delta = (angle * Math::PI)/180.0 citem.coords = citem.coords.enum_slice(2).collect{|x, y| r = Math::hypot(y, x) a = Math::atan2(y, x) + delta [Math::cos(a) * r, Math::sin(a) * r] } end coords = [[100, 30], [200, 30], [100, 80]] c = TkCanvas.new(:height=>480, :width=>480, :scrollregion=>[-240, -240, 240, 240]).pack poly = TkcPolygon.new(c, coords, :fill=>'red') p poly.coords TkcOval.new(c, [[-2, -2], [2, 2]], :fill=>'black') TkTimer.start(20, -1, proc{poly_rotate(poly, 5)}) Tk.mainloop --------------------------------------------------------------- -- Hidetoshi NAGAI (nagai / ai.kyutech.ac.jp)