lib/bezierspline.rb in xrvg-0.0.2 vs lib/bezierspline.rb in xrvg-0.0.3
- old
+ new
@@ -1,7 +1,10 @@
# +BezierSpline+ source
+require 'interpolation'
+
+
# BezierSpline class
#
# Internal class to represent a single-piece cubic bezier curve, defined by four points or two point + two vectors.
# You may never have to use this class. Prefer the use of +Bezier+ class
class BezierSpline #:nodoc:
@@ -16,12 +19,12 @@
self.initdata( type, v1, v2, v3, v4 )
end
def checkvalues( v1, v2, v3, v4 )
[v1, v2, v3, v4].each do |v|
- if not v.is_a? V2D
- Kernel::raise( "BezierSpline : init value #{v.inspect} is not a V2D" )
+ if not (v.respond_to?(:x) || v.respond_to?(:y))
+ Kernel::raise( "BezierSpline : init value #{v.inspect} does not respond to :x or :y" )
end
end
end
def checktype( type )
@@ -202,38 +205,38 @@
sum = 0.0
previous = nil
samplelist = [0.0, 0.0]
new = V2D[0.0,0.0]
previous = nil
- (0.0..1.0).samples( 100 ) do |abs|
+ (0.0..1.0).samples( 129 ) do |abs|
self.point( abs, new )
if previous
sum+= (new - previous).r
- samplelist += [abs, sum]
+ samplelist += [sum, abs]
else
previous = V2D[0.0,0.0]
end
previous.x = new.x
previous.y = new.y
end
- @length = samplelist[-1]
+ @length = samplelist[-2]
length_interpolator = nil
if @length == 0.0
- newsamplelist = [0.0,0.0,1.0,0.0]
- invsamplelist = [0.0,0.0,0.0,1.0]
+ newsamplelist = [0.0,0.0,0.0,1.0]
+ invsamplelist = [0.0,0.0,1.0,0.0]
else
newsamplelist = []
invsamplelist = []
- samplelist.foreach do |abs, sum|
- newsamplelist += [abs, sum / @length]
- invsamplelist += [sum / @length, abs]
+ samplelist.foreach do |sum, abs|
+ newsamplelist += [sum / @length, abs ]
+ invsamplelist += [abs, sum / @length ]
end
samplelist = newsamplelist
end
- @abs_interpolator = Interpolator.new( :samplelist, invsamplelist )
- return Interpolator.new( :samplelist, samplelist )
+ @abs_interpolator = InterpolatorQuad.new( :samplelist, invsamplelist )
+ return InterpolatorQuad.new( :samplelist, samplelist )
end
def length_interpolator() #:nodoc:
if @length_interpolator == nil
@length_interpolator = self.compute_length_interpolator()
@@ -255,12 +258,11 @@
def compute_length() #:nodoc:
self.length_interpolator()
return @length
end
- def parameterfromlength( l ) #:nodoc:
- result = self.length_interpolator.interpolate( l )
+ def parameterfromlength( lvalue ) #:nodoc:
+ result = self.length_interpolator.interpolate( lvalue )
return result
- end
-
-
+ end
end
+