lib/beziertools.rb in xrvg-0.0.81 vs lib/beziertools.rb in xrvg-0.0.82

- old
+ new

@@ -206,26 +206,28 @@ # def compute_arc( abs1, abs2, amplitude, sens ) mabs = (abs1 + abs2)/2.0 p1, halfpoint, p2 = self.support.points( [abs1, mabs, abs2] ) # Trace("mabs #{mabs} abs1 #{abs1} abs2 #{abs2} halfpoint #{halfpoint.inspect} p1 #{p1.inspect} p2 #{p2.inspect}") - # Trace("normal #{@support.normal( mabs )}") halfnormal = self.support.normal( mabs ).norm * ( sens * amplitude * (p2 - p1).length) # Trace("halfnormal #{halfnormal.inspect}") newpoint = halfpoint + halfnormal tpoint = halfpoint + halfnormal * 3.0 t1 = (tpoint - p1 ) / 6.0 t2 = (tpoint - p2 ) / 6.0 # Trace("newpoint #{newpoint.inspect} p1 #{p1.inspect} (newpoint - p1) #{(newpoint - p1).inspect}") + # TODO: following lines repetitive halftangent = self.support.tangent( mabs ).norm * (newpoint - p1).length / 3.0 - # halftangent = self.support.tangent( mabs ).norm * (p2 - p1).length / 3.0 + halftangent = self.support.tangent( mabs ).norm * (p2 - p1).length / 3.0 + # Trace("halftangent #{halftangent.inspect} t1 #{t1.inspect} t2 #{t2.inspect}") return [[:vector, p1, t1, newpoint, -halftangent], [:vector, newpoint, halftangent, p2, t2]] end def compute_interpol( abs1, abs2, amplitude, sens ) - arc = Bezier.multi( self.compute_arc( abs1, abs2, 1.0, sens ) ) + orientation = amplitude > 0.0 ? 1.0 : -1.0 + arc = Bezier.multi( self.compute_arc( abs1, abs2, orientation, sens ) ) subsupport = self.support.subbezier( abs1, abs2 ) - return InterBezier[ :bezierlist, [0.0, subsupport, 1.0, arc] ].sample( amplitude ).data + return InterBezier[ :bezierlist, [0.0, subsupport, 1.0, arc] ].sample( amplitude.abs ).data end # algo : for each abscissa, 0.0 of the curve (given the normal) # and for each mean abscissa, :amp normal def compute