sketchucation logo sketchucation
    • Login
    🤑 SketchPlus 1.3 | 44 Tools for $15 until June 20th Buy Now

    Fit_plane_to_points problem

    Scheduled Pinned Locked Moved Developers' Forum
    9 Posts 4 Posters 438 Views 4 Watching
    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.
    • D Offline
      dacastror
      last edited by

      Hi guys, I'm trying to adjust hundreds of points to a plane, my problem is that I do not understand the output format fit_plane_to_points, I expected a Point3d and Vector3D, but it seems I get different, I do not know how to interpret the result, appreciate the help in advance

      point1 = Geom::Point3d.new 0,0,0 point2 = Geom::Point3d.new 1,2,3 point3 = Geom::Point3d.new 5,5,5 plane = Geom.fit_plane_to_points point1, point2, point3 plane.size

      1 Reply Last reply Reply Quote 0
      • Dan RathbunD Offline
        Dan Rathbun
        last edited by

        The plane is returned as an [A,B,C,D] Array of 4 numbers which are the coefficients of the plane equation Ax + By + Cz + D = 0.

        I'm not here much anymore.

        1 Reply Last reply Reply Quote 0
        • jolranJ Offline
          jolran
          last edited by

          Fit plane to Points returns a plane on which you can use SU-API methods.
          It also returns what Dan said.

          A plane is infinite, and so is a Line [point3d, vector]

          I suspect what you acctually want to do is Project your Points on to that plane with the point.project_to_plane method?

          1 Reply Last reply Reply Quote 0
          • D Offline
            dacastror
            last edited by

            thank you very much Dan, is exactly what I needed 😄

            thank jolran, that's not my next step, but I thank you, I had not seen the command project_to_plane 👍

            1 Reply Last reply Reply Quote 0
            • D Offline
              dacastror
              last edited by

              I thought of a way to put the plane in the format [point, vector], at some point it might be useful to someone

              p1 = Geom;;Point3d.new 1,1,1
              p2 = Geom;;Point3d.new 2,1,1
              p3 = Geom;;Point3d.new 1,2,1
              p4 = Geom;;Point3d.new 1,2,0
              pl = Geom.fit_plane_to_points p1, p2, p3, p4
              
              tolerance = 0.0001
              if pl[2].abs > tolerance
                 point = Geom;;Point3d.new(0,0,-pl[3]/ pl[2])
              elsif pl[1].abs > tolerance
                 point = Geom;;Point3d.new(0,-pl[3]/ pl[1],0)
              else
                 point = Geom;;Point3d.new(-pl[3]/ pl[0],0,0)
              end
              vector = Geom;;Vector3d.new(pl[0],pl[1],pl[2])
              
              plane = [point,vector]
              
              1 Reply Last reply Reply Quote 0
              • jolranJ Offline
                jolran
                last edited by

                @unknownuser said:

                thank jolran, that's not my next step, but I thank you, I had not seen the command project_to_plane 👍

                Ahh, I see. You ARE just interested in getting Point and vector, for some reason. 😄

                Then if I'm not misstaken I think p4 is redudant in you calculation ?

                You only have to feed 3 Points for fit_plane_to_points.

                1 Reply Last reply Reply Quote 0
                • thomthomT Offline
                  thomthom
                  last edited by

                  https://bitbucket.org/thomthom/tt-library-2/src/2bb264f27d9bc00c1b1f9a969e481c19385042ad/TT_Lib2/geom3d.rb?at=Version%202.9#cl-20

                  <span class="syntaxdefault">&nbsp;&nbsp;</span><span class="syntaxcomment">#&nbsp;Returns&nbsp;+plane+&nbsp;in&nbsp;the&nbsp;format&nbsp;+[&nbsp;point3d,&nbsp;vector3d&nbsp;]+.<br />&nbsp;&nbsp;#<br />&nbsp;&nbsp;#&nbsp;@param&nbsp;[Array<Geom;;Point3d,&nbsp;Geom;;Vector3d>,&nbsp;Array<Number,&nbsp;Number,&nbsp;Number,&nbsp;Number>]&nbsp;plane<br />&nbsp;&nbsp;#<br />&nbsp;&nbsp;#&nbsp;@return&nbsp;[Array<Geom;;Point3d,&nbsp;Geom;;Vector3d>]<br />&nbsp;&nbsp;#&nbsp;@since&nbsp;2.0.0<br />&nbsp;&nbsp;</span><span class="syntaxdefault">def&nbsp;self</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">normalize_plane</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">plane</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span class="syntaxdefault">plane&nbsp;</span><span class="syntaxkeyword">if&nbsp;</span><span class="syntaxdefault">plane</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">length&nbsp;</span><span class="syntaxkeyword">==&nbsp;</span><span class="syntaxdefault">2<br />&nbsp;&nbsp;&nbsp;&nbsp;a</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">b</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">c</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">d&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">plane<br />&nbsp;&nbsp;&nbsp;&nbsp;v&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">Geom</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">Vector3d</span><span class="syntaxkeyword">.new(</span><span class="syntaxdefault">a</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">b</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">c</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">p&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">ORIGIN</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">offset</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">v</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">reverse</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">d</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;[</span><span class="syntaxdefault">p</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">v</span><span class="syntaxkeyword">]<br />&nbsp;&nbsp;</span><span class="syntaxdefault">end<br /></span>
                  

                  Thomas Thomassen — SketchUp Monkey & Coding addict
                  List of my plugins and link to the CookieWare fund

                  1 Reply Last reply Reply Quote 0
                  • thomthomT Offline
                    thomthom
                    last edited by

                    @dacastror said:

                    I expected a Point3d and Vector3D, but it seems I get different,

                    The definition of a plane in SketchUp is described in the introduction to Geom3d: sketchucation.com/forums/posting.php?mode=quote&f=180&p=485589

                    @unknownuser said:

                    A line can be represented as either an Array of a point and a vector, or as an Array of two points.

                    <span class="syntaxdefault">     line </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">[</span><span class="syntaxdefault">Geom</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">Point3d</span><span class="syntaxkeyword">.new(</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">),<br /></span><span class="syntaxdefault">     Geom</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">Vector3d</span><span class="syntaxkeyword">.new(</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">)]<br /></span><span class="syntaxdefault">     line </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">[</span><span class="syntaxdefault">Geom</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">Point3d</span><span class="syntaxkeyword">.new(</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">),<br /></span><span class="syntaxdefault">     Geom</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">Point3d</span><span class="syntaxkeyword">.new(</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">100</span><span class="syntaxkeyword">)]</span><span class="syntaxdefault"> </span>
                    

                    A plane can be represented as either an Array of a point and a vector, or as an Array of 4 numbers that give the coefficients of a plane equation.

                    <span class="syntaxdefault">     plane </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">[</span><span class="syntaxdefault">Geom</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">Point3d</span><span class="syntaxkeyword">.new(</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">),<br /></span><span class="syntaxdefault">     Geom</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">Vector3d</span><span class="syntaxkeyword">.new(</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">)]<br /></span><span class="syntaxdefault">     plane </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span>
                    

                    Thomas Thomassen — SketchUp Monkey & Coding addict
                    List of my plugins and link to the CookieWare fund

                    1 Reply Last reply Reply Quote 0
                    • D Offline
                      dacastror
                      last edited by

                      I did not understand point.offset, with this example I understand a little more, thank you very much Thom, very interesting this 😄

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

                      Advertisement