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