• Login
sketchucation logo sketchucation
  • Login
๐Ÿค‘ 30% Off | Artisan 2 on sale until April 30th Buy Now

Length woes

Scheduled Pinned Locked Moved Developers' Forum
11 Posts 6 Posters 1.3k Views
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A Offline
    Al Hart
    last edited by 11 Dec 2007, 06:08

    Here is an interesting "feature" of the SketchUp Length class:

    l1 = 0.00.to_l # create a 0 Length
    l2 = 0.000001.to_l
    l1 == l2 # returns true

    although they are reported as equal, they print as different values.

    This showed up when trying to determine when a normal vector was 0
    v1 = Geom::Vector3d.new(0,0,0)
    v1.length < 0.00001 # returns false

    Al Hart

    http://wiki.renderplus.com/images/e/ef/Render_plus_colored30x30%29.PNG
    IRender nXt from Render Plus

    1 Reply Last reply Reply Quote 0
    • G Offline
      g2ktcf
      last edited by 11 Dec 2007, 06:10

      Al,

      I do remember reading something about "within a tolerance" for many of the SU functions. I do not know what the tolerance is but you may be getting two values the the sytem considers EQUAL within a tolerance. Then the "<" would be false as both numbers are Zero within this established tolerance (i thought it was 0.01")

      just my quick after lunch thoughts...

      Chris

      1 Reply Last reply Reply Quote 0
      • D Offline
        Didier Bur
        last edited by 11 Dec 2007, 06:11

        Yes,
        In fact, I often had to write my own "within tolerance" method, as well as several other coders I think. Safer... ๐Ÿ˜‰

        DB

        1 Reply Last reply Reply Quote 0
        • G Offline
          g2ktcf
          last edited by 11 Dec 2007, 06:12

          What is the actual "tolerance" value? Anyone?

          1 Reply Last reply Reply Quote 0
          • T Offline
            todd burch
            last edited by 11 Dec 2007, 06:12

            Try Float::EPSILON.

            Todd

            1 Reply Last reply Reply Quote 0
            • G Offline
              g2ktcf
              last edited by 11 Dec 2007, 06:13

              Okay...that's a REALLY small number. ๐Ÿ˜•

              1 Reply Last reply Reply Quote 0
              • G Offline
                g2ktcf
                last edited by 11 Dec 2007, 06:15

                Okay, I had to play this morning on this.

                I took the same L1 and L2 example and varied the value of l2 by a factor of 10 until the L1==L2 statement returned FALSE. It seems that a value of l2=0.001 is the point at which things change. I tried an l2 = 0.0005 and that returned TRUE. This must be handled in the class methods....Right???

                1 Reply Last reply Reply Quote 0
                • G Offline
                  g2ktcf
                  last edited by 11 Dec 2007, 06:15

                  It seems the same argument goes for the Zero Vector. Setting either of these with a value less than 0.001" will result in SU "seeing' them as zero even though they print out differently. ๐Ÿ˜ฎ

                  1 Reply Last reply Reply Quote 0
                  • T Offline
                    TIG Moderator
                    last edited by 11 Dec 2007, 06:16

                    "float-tolerance.rb" is by RickW [I think - I hope he doesn't mind me repeating it in its entirety here]

                    
                    class Float
                    	def =~(num2,tol=10000)
                    		num1=(self*tol).to_i
                    		num2=(num2*tol).to_i
                    		return true if num1==num2
                    		return nil
                    	end
                    end #class Float
                    
                    

                    Then you test two floats thus:
                    float1 =~ float2
                    It returns false or true
                    You could adjust the float tol part to suit...

                    TIG

                    1 Reply Last reply Reply Quote 0
                    • R Offline
                      RickW
                      last edited by 11 Dec 2007, 06:17

                      I don't mind as long as there's a link ๐Ÿ˜„
                      (http://www.smustard.com/script/FloatTolerance )

                      RickW
                      [www.smustard.com](http://www.smustard.com)

                      1 Reply Last reply Reply Quote 0
                      • G Offline
                        g2ktcf
                        last edited by 11 Dec 2007, 06:17

                        I actually found this implied in an example in the length class API. If you use a float, the math comes out like you would expect. The Length class is where this changes (as Al suspected). Notice that the 0.001" value that I got while testing is not mentioned as a limiting factor.

                        @unknownuser said:

                        <
                        The < method is used to see if one length is less than another length.

                        Syntax
                        status = length1 < length2
                        Arguments
                        length1 - a length value

                        length2 - a length value

                        Return Value
                        status - true if length1 is < length2; false if length1 is not < length2

                        Comments
                        For example, if l1 = 1.0.inch and l2 = 1.000001.inch then l1 == l2 so l1 < l2 should return false.

                        1 Reply Last reply Reply Quote 0
                        • 1 / 1
                        1 / 1
                        • First post
                          4/11
                          Last post
                        Buy SketchPlus
                        Buy SUbD
                        Buy WrapR
                        Buy eBook
                        Buy Modelur
                        Buy Vertex Tools
                        Buy SketchCuisine
                        Buy FormFonts

                        Advertisement