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

Intersecting radii in 3D space

Scheduled Pinned Locked Moved Plugins
11 Posts 6 Posters 1.2k Views 6 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.
  • R Offline
    robint
    last edited by 1 Jan 2011, 07:52

    😎

    Hi all

    some years ago SU5 days, I came across a problem requiring the intersection on a circle with a line of fixed length (not a tangent). This proved impossible in SU because as we know a circle is a collection of segments. I was able to do the simple math (on Xcel) and input the 10 digit decimal of the coordinates on the 2D surface. Clearly a very cumbersom procedure but it worked. At the time Ruby came out but I didnt have the time to devote to learning it sufficiently. I guess now there are thousands of you smart guys out there who could whistle up a little plug in to do this seemingly mundane task.

    I did go on further to do the math for the 3D space which produced all three coordinates for the exact point. As we all know you have to be exact or your plane wont fill and its downhill all the way after that.

    I could replicate the math in pseudo code - simple enough to understand if you knew excel notation and only comes out at about 10 lines of simple algebra

    Would any kind soul be interested in collaborating on this as the use of this tool is not at all trivial.

    Cheers RobinT

    Cheers robin

    As one door closes another one slams in your face

    1 Reply Last reply Reply Quote 0
    • F Offline
      fredo6
      last edited by 1 Jan 2011, 14:00

      Could you post an image to illustrate what you are looking for.
      I can understand the intersection of a segment and a sphere, but it's seems more difficult to see the intersection of a segment with a circle, which in many cases won't have a solution.

      Fredo

      1 Reply Last reply Reply Quote 0
      • M Offline
        mac1
        last edited by 1 Jan 2011, 16:20

        This is a trivial math solution but you need to program it in a spread sheet unless some one decides to write a plugin. It can also be done graphically but gets to be a challenge in 3d. This link works for both 3 and 2d. For 2d just set the z to zero. http://forums.sketchucation.com/viewtopic.php?f=323&t=32229. I have it programed in Open Office but have not included the logic for the correct angle based on the principal values and the 5 possible solutions for the 3d case. I'll send if you want but it is very quick to program.

        1 Reply Last reply Reply Quote 0
        • M Offline
          mac1
          last edited by 2 Jan 2011, 14:51

          The URL to the link for the math solution is in the skp file. Here is the link http://local.wasp.uwa.edu.au/~pbourke/geometry/sphereline/. The author of this 1992 paper gives a unique brilliant solution that makes it trivial to solve.

          1 Reply Last reply Reply Quote 0
          • F Offline
            fredo6
            last edited by 2 Jan 2011, 18:59

            @mac1 said:

            The URL to the link for the math solution is in the skp file. Here is the link http://local.wasp.uwa.edu.au/~pbourke/geometry/sphereline/. The author of this 1992 paper gives a unique brilliant solution that makes it trivial to solve.

            Actually, I remember I used this algorithm in the BZ_Divider extension of BezierSpline. I also took it from Paul Bourke
            The source code in Ruby is in BZ__Divider.rb (line 138) in the folder BZ_Dir_14

            Here is the code I use

            
            def intersect_ray_sphere(p1, p2, sc, r)
            
            #   Calculate the intersection of a ray and a sphere
            #   The line segment is defined from p1 to p2
            #   The sphere is of radius r and centered at point sc
            #   There are potentially two points of intersection given by
            #   p = p1 + mu1 (p2 - p1)
            #   p = p1 + mu2 (p2 - p1)
            #   Return FALSE if the ray doesn't intersect the sphere.
            #   Credit to Paul Bourke (1992)- see http://local.wasp.uwa.edu.au/~pbourke/geometry/sphereline/
            
                dp = Geom;;Point3d.new 
                tolerance = 0.001.cm
               
                dp.x = p2.x - p1.x
                dp.y = p2.y - p1.y
                dp.z = p2.z - p1.z
               
                a = dp.x * dp.x + dp.y * dp.y + dp.z * dp.z
                b = 2 * (dp.x * (p1.x - sc.x) + dp.y * (p1.y - sc.y) + dp.z * (p1.z - sc.z))
                c = sc.x * sc.x + sc.y * sc.y + sc.z * sc.z
                c += p1.x * p1.x + p1.y * p1.y + p1.z * p1.z
                c -= 2 * (sc.x * p1.x + sc.y * p1.y + sc.z * p1.z)
                c -= r * r
                bb4ac = b * b - 4 * a * c
               
                if (a.abs < tolerance || bb4ac < 0)
            	puts "No solution"
            	return 99999.9
                end	
            
                mu1 = (-b + Math.sqrt(bb4ac)) / (2 * a);
                mu2 = (-b - Math.sqrt(bb4ac)) / (2 * a);
            
                mu1
            end
            
            #Note; I only need mu1 in the BZ Divider problem.
            
            

            Then once you have mu1 and mu2, and assuming they are valid, you can compute the intersection points as
            pt_inter1 = Geom.linear_combination 1.0 - mu1, p1, mu1, p2
            pt_inter2 = Geom.linear_combination 1.0 - mu2, p1, mu2, p2

            Fredo

            1 Reply Last reply Reply Quote 0
            • R Offline
              robint
              last edited by 4 Jan 2011, 10:02

              Hi guys

              Im sure we all agree the math is the easy bit and I programmed it into Xcel to give the 3D coords - fine, but you have to input them to su to 10 decimal places to get fully coherent filled planes and accuracy - very tedious.

              In case I didnt explain myself properly, just try constructing a 2D
              d triangle with 3 unequal side say 1, 2 , 3

              you wont manage it in SU by construction but you can calculate the point of intersection but to 10+ decimals

              then go to the 3D case where you construct a tetrahedron all with unequal sides

              I will look at the other stuff posted in the next couple days

              cheers new year thingy

              As one door closes another one slams in your face

              1 Reply Last reply Reply Quote 0
              • R Offline
                robint
                last edited by 22 Jan 2011, 14:13

                @robint said:

                Hi guys

                Im sure we all agree the math is the easy bit and I programmed it into Xcel to give the 3D coords - fine, but you have to input them to su to 10 decimal places to get fully coherent filled planes and accuracy - very tedious.

                In case I didnt explain myself properly, just try constructing a 2D
                d triangle with 3 unequal side say 1, 2 , 3

                you wont manage it in SU by construction but you can calculate the point of intersection but to 10+ decimals

                then go to the 3D case where you construct a tetrahedron all with unequal sides

                I will look at the other stuff posted in the next couple days

                cheers new year thingy

                btw

                this all started for me when I tried to construct a tetrahedron (12 pentagons forming a spherical shape one of the pythagoras perfect solids)

                starting from a simple pentagon shape as the base, you then make 5 other equl shapes joining the base sides. Then you have to fold them upwards like a tulip until the touch their sides - try it in SU

                you really do need a ruby plug in to find the points of the intersection of circles and spheres in 2 and 3D space because as we know the circle in only polygon with a lot of sides - an approximation to a circle and even with 999 sides its still not accurate enough for SU

                cheers Robin

                As one door closes another one slams in your face

                1 Reply Last reply Reply Quote 0
                • GaieusG Offline
                  Gaieus
                  last edited by 22 Jan 2011, 14:20

                  Well, with some little trick and using the golden section, you can make a perfect tetrahedron... But of course for us, poor SU users a real circle guide tool would be the ideal.

                  Gai...

                  1 Reply Last reply Reply Quote 0
                  • R Offline
                    robint
                    last edited by 23 Jan 2011, 09:50

                    @gaieus said:

                    Well, with some little trick and using the golden section, you can make a perfect tetrahedron... But of course for us, poor SU users a real circle guide tool would be the ideal.

                    yes indeed you can get coords by geometrical calcs, there is a whole raft of interesting surds involving root 3

                    I can mail these to you if you want brain damage.

                    I did manage to make a perfect tatrahedron in SU but it was very tortuous

                    I can provide the math in pseudo code (like excel)

                    but I cant yet manage ruby, but from the little i know its perfectly possible and the tool would be simple to use

                    simply define the origin of the radii (by clicking a point or entering the coords) then enter the radii length, then display a crosshair point on the screen space, then draw in the lines to connect origins to the points and SU isn then happy

                    wish wish

                    robin

                    As one door closes another one slams in your face

                    1 Reply Last reply Reply Quote 0
                    • BepB Offline
                      Bep
                      last edited by 23 Jan 2011, 22:04

                      In these two topics this problem in although 2D is adressed and some posibilitys and ruby solutions are given.
                      http://forums.sketchucation.com/viewtopic.php?f=323&t=10140 http://forums.sketchucation.com/viewtopic.php?f=323&t=19457

                      Greetings,

                      Bep van Malde

                      "History is written by the winners"

                      1 Reply Last reply Reply Quote 0
                      • TIGT Offline
                        TIG Moderator
                        last edited by 24 Jan 2011, 10:41

                        @jim4366 said:

                        This is one way to make a tetrahedron from scratch. Without a plugin.
                        It seems that if the angle resolution is 1000 segments per quarter circle or better, it works.
                        Same basic idea folding up a pentagon will make a dodecahedron.

                        Using a drawn technique will always give some inaccuracy - although 1000 segments will often give a good enough result!
                        Here's the mathematical way...
                        The height of a tetrahedron with sides 1 unit long is 0.8164965809 units.
                        This is 'simple' similar-triangle + Pythagoras way, with lots of sqrt(3) etc: see below...
                        Draw the tetrahedron as a flat 2d shape scaled so the sides are 1 unit long.
                        Draw the 3 intersecting lines from apex to mid-point of each side.
                        Erase unwanted bits.
                        Move Tool with nothing selected pick 'center' - which will be the apex when relocated.
                        Pick the Vertex at the center and move up in blue [z] constrained with Shift-key.
                        Type in 0.8164965809 [=(sqrt(2.6666666666667))/2].
                        The tetrahedron is now almost complete.
                        Draw over an edge to make the base-face form.
                        Use 'reverse' on any face so it's 'out' and then use 'orient' so all other faces match.
                        Treble click to select all, make a Group of it.
                        Edit the group and use the Tapemeasure tool to pick two Vertices [these are currently 1 unit apart] and type in the desire size for the sides of the final tetrahedron; confirm when warned and the whole group is rescaled to that side-size...
                        Done.Capture.PNG

                        TIG

                        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