# Determining X and Y for the intersection of a conic section and rotated plane given Y Classic List Threaded 15 messages Open this post in threaded view
|

## Determining X and Y for the intersection of a conic section and rotated plane given Y

 I have this shape: //!OpenSCAD \$fn=80; difference(){ translate([0, 0.125, 0.25]){ rotate([0, 90, 0]){ cylinder(r1=0, r2=0.125, h=(0.125 / tan(15)), center=false); } } union(){     cube([1, 1, 0.25], center=false); rotate([0, 45, 0]){     cube([1, 1, 1], center=false); } } } (a cone rotated so that the tip points to the left and cut off at 45 degrees by a plane running from 0,0,0 up to the right) For a given Y, how do I calculate the X and Y of the intersection of the cone and the plane? I want to step through it and essentially draw a series of lines along the top of the shape. All the math I've found for this is in terms of polar coordinates which I can't puzzle out how to make work in OpenSCAD, or I'm just not understanding something --- references to a good textbook on this would be welcome as well. William _______________________________________________ OpenSCAD mailing list To unsubscribe send an email to [hidden email]
Open this post in threaded view
|

## Re: Determining X and Y for the intersection of a conic section and rotated plane given Y

 This may be useful, although I fear a substantial amount of maths lies ahead! https://www.quora.com/What-is-intersection-of-a-true-cone-and-a-planeTerry Sent from the OpenSCAD mailing list archive at Nabble.com._______________________________________________ OpenSCAD mailing list To unsubscribe send an email to [hidden email]
Open this post in threaded view
|

## Re: Determining X and Y for the intersection of a conic section and rotated plane given Y

 Thanks! I'll look at it ---and of course, there was a typo in my post: "For a given Y, how do I calculate the X and Y of the intersection of the cone and the plane? I want to step through it and essentially draw a series of lines along the top of the shape." should instead be: For a given Y, how do I calculate the X and _Z_ of the intersection of the cone and the plane? I want to step through it and essentially draw a series of lines along the top of the shape. William -----Original Message----- From: Terrypin <[hidden email]> To: [hidden email] Sent: Thu, Jun 17, 2021 10:46 am Subject: [OpenSCAD] Re: Determining X and Y for the intersection of a conic section and rotated plane given Y This may be useful, although I fear a substantial amount of maths lies ahead! https://www.quora.com/What-is-intersection-of-a-true-cone-and-a-planeTerry Sent from the OpenSCAD mailing list archive at Nabble.com. _______________________________________________OpenSCAD mailing listTo unsubscribe send an email to [hidden email] _______________________________________________ OpenSCAD mailing list To unsubscribe send an email to [hidden email]
Open this post in threaded view
|

## Re: Determining X and Y for the intersection of a conic section and rotated plane given Y

 It should also be somewhat simplified (!) because that intersection angle of 45 degs makes the intersection curve an ellipse. That has a relatively accessible equation (compared to the hyperbola) which might help you avoid polar co-ordinates. My trig studies were decades ago, so hopefully someone with genuine expertise will come to your aid shortly ;-) Sent from the OpenSCAD mailing list archive at Nabble.com._______________________________________________ OpenSCAD mailing list To unsubscribe send an email to [hidden email]
Open this post in threaded view
|

## Re: Determining X and Y for the intersection of a conic section and rotated plane given Y

 In reply to this post by OpenSCAD mailing list-2 I'm not really following what you're trying to do, but I can provide a couple of tidbits. First, what's your real use case?  If you just want to chop the cone off, you could have OpenSCAD do that without you needing to know the coordinates. Second, polar coordinates... Wikipedia is always a good place to start: https://en.wikipedia.org/wiki/Polar_coordinate_system https://en.wikipedia.org/wiki/Spherical_coordinate_system Here's some functions: ```// Given an [x,y] or [x,y,z], transform to a // [rho, theta] or [rho, theta, phi]. // Note that in mathematical spherical coordinates, // phi is measured down from vertical. This is as // opposed to geographic coordinates, where latitude // is measured up from the equator. function topolar(p) = len(p) == 3 ? topolar3(p) : topolar2(p); function topolar2(p) = [ norm(p), atan2(p.y, p.x) ]; function topolar3(p) = [ norm(p), atan2(p.y, p.x), atan2(norm([p.x,p.y]), p.z) ]; // Given a [rho, theta] or [rho, theta, phi], transform to // an [x,y] or [x,y,z]. function torect(p) = len(p) == 3 ? torect3(p) : torect2(p); function torect2(p) = [ p * cos(p), p * sin(p) ]; function torect3(p) = [ p * cos(p) * sin(p), p * sin(p) * sin(p), p * cos(p) ]; echo(topolar([10,0])); echo(topolar([10,1])); echo(topolar([10,10])); echo(topolar([-10,10])); echo(topolar([-10,-10])); echo(topolar([10,-10])); echo(); echo(topolar([10,0,0])); echo(topolar([10,1,0])); echo(topolar([10,10,10])); echo(topolar([-10,10,10])); echo(topolar([-10,-10,10])); echo(topolar([10,-10,10])); echo(); rho = 100; for (theta = [0:10:70]) for (phi=[0:10:70]) translate(torect([rho, theta, phi])) cube(1); ``` _______________________________________________ OpenSCAD mailing list To unsubscribe send an email to [hidden email]
Open this post in threaded view
|

## Re: Determining X and Y for the intersection of a conic section and rotated plane given Y

 A conic section is always a circle (OpenSCAD primitive), an ellipse (easily achievable in OpenSCAD via scaling a circle), or an unbounded curve (parabola, hyperbola) which I'd probably approximate unless I needed a really precise version. So I too wonder what the use case is, and whether there's an easier way.On Thu, Jun 17, 2021 at 11:11 AM Jordan Brown <[hidden email]> wrote: I'm not really following what you're trying to do, but I can provide a couple of tidbits. First, what's your real use case?  If you just want to chop the cone off, you could have OpenSCAD do that without you needing to know the coordinates. Second, polar coordinates... Wikipedia is always a good place to start: https://en.wikipedia.org/wiki/Polar_coordinate_system https://en.wikipedia.org/wiki/Spherical_coordinate_system Here's some functions: ```// Given an [x,y] or [x,y,z], transform to a // [rho, theta] or [rho, theta, phi]. // Note that in mathematical spherical coordinates, // phi is measured down from vertical. This is as // opposed to geographic coordinates, where latitude // is measured up from the equator. function topolar(p) = len(p) == 3 ? topolar3(p) : topolar2(p); function topolar2(p) = [ norm(p), atan2(p.y, p.x) ]; function topolar3(p) = [ norm(p), atan2(p.y, p.x), atan2(norm([p.x,p.y]), p.z) ]; // Given a [rho, theta] or [rho, theta, phi], transform to // an [x,y] or [x,y,z]. function torect(p) = len(p) == 3 ? torect3(p) : torect2(p); function torect2(p) = [ p * cos(p), p * sin(p) ]; function torect3(p) = [ p * cos(p) * sin(p), p * sin(p) * sin(p), p * cos(p) ]; echo(topolar([10,0])); echo(topolar([10,1])); echo(topolar([10,10])); echo(topolar([-10,10])); echo(topolar([-10,-10])); echo(topolar([10,-10])); echo(); echo(topolar([10,0,0])); echo(topolar([10,1,0])); echo(topolar([10,10,10])); echo(topolar([-10,10,10])); echo(topolar([-10,-10,10])); echo(topolar([10,-10,10])); echo(); rho = 100; for (theta = [0:10:70]) for (phi=[0:10:70]) translate(torect([rho, theta, phi])) cube(1); ``` _______________________________________________ OpenSCAD mailing list To unsubscribe send an email to [hidden email] _______________________________________________ OpenSCAD mailing list To unsubscribe send an email to [hidden email]
Open this post in threaded view
|

## Re: Determining X and Y for the intersection of a conic section and rotated plane given Y

 What I need to do is to draw lines, which terminate at the intersection of the plane and the cone, either: (but I don't think that will work 'cause the needed shape would be a curve, not a straight line) So more probably: So for a given Y, (sectioning along the length of the cone), I need to calculate X and Z, so I can feed it into a loop which has a module iterate on moving a V endmill across that. William -----Original Message----- From: Father Horton <[hidden email]> To: OpenSCAD general discussion <[hidden email]> Sent: Thu, Jun 17, 2021 12:29 pm Subject: [OpenSCAD] Re: Determining X and Y for the intersection of a conic section and rotated plane given Y A conic section is always a circle (OpenSCAD primitive), an ellipse (easily achievable in OpenSCAD via scaling a circle), or an unbounded curve (parabola, hyperbola) which I'd probably approximate unless I needed a really precise version. So I too wonder what the use case is, and whether there's an easier way. On Thu, Jun 17, 2021 at 11:11 AM Jordan Brown <[hidden email]> wrote: I'm not really following what you're trying to do, but I can provide a couple of tidbits. First, what's your real use case?  If you just want to chop the cone off, you could have OpenSCAD do that without you needing to know the coordinates. Second, polar coordinates... Wikipedia is always a good place to start: https://en.wikipedia.org/wiki/Polar_coordinate_system https://en.wikipedia.org/wiki/Spherical_coordinate_system Here's some functions: ```// Given an [x,y] or [x,y,z], transform to a // [rho, theta] or [rho, theta, phi]. // Note that in mathematical spherical coordinates, // phi is measured down from vertical. This is as // opposed to geographic coordinates, where latitude // is measured up from the equator. function topolar(p) = len(p) == 3 ? topolar3(p) : topolar2(p); function topolar2(p) = [ norm(p), atan2(p.y, p.x) ]; function topolar3(p) = [ norm(p), atan2(p.y, p.x), atan2(norm([p.x,p.y]), p.z) ]; // Given a [rho, theta] or [rho, theta, phi], transform to // an [x,y] or [x,y,z]. function torect(p) = len(p) == 3 ? torect3(p) : torect2(p); function torect2(p) = [ p * cos(p), p * sin(p) ]; function torect3(p) = [ p * cos(p) * sin(p), p * sin(p) * sin(p), p * cos(p) ]; echo(topolar([10,0])); echo(topolar([10,1])); echo(topolar([10,10])); echo(topolar([-10,10])); echo(topolar([-10,-10])); echo(topolar([10,-10])); echo(); echo(topolar([10,0,0])); echo(topolar([10,1,0])); echo(topolar([10,10,10])); echo(topolar([-10,10,10])); echo(topolar([-10,-10,10])); echo(topolar([10,-10,10])); echo(); rho = 100; for (theta = [0:10:70]) for (phi=[0:10:70]) translate(torect([rho, theta, phi])) cube(1); ``` _______________________________________________ OpenSCAD mailing list To unsubscribe send an email to [hidden email] _______________________________________________OpenSCAD mailing listTo unsubscribe send an email to [hidden email] _______________________________________________ OpenSCAD mailing list To unsubscribe send an email to [hidden email]
Open this post in threaded view
|

## Re: Determining X and Y for the intersection of a conic section and rotated plane given Y

 Sorry, I'm still not visualizing what you're looking for. Perhaps you could supply the OpenSCAD program, so that one could look at the result in 3D? Are you just looking for the line along the intersection of a cone and a plane?  (Not that I immediately know how to calculate that, but I might be able to figure it out.  Where's one of the serious math people when you need them? :-) _______________________________________________ OpenSCAD mailing list To unsubscribe send an email to [hidden email]
Open this post in threaded view
|

## Re: Determining X and Y for the intersection of a conic section and rotated plane given Y

 In reply to this post by OpenSCAD mailing list-2 Or https://www.dropbox.com/s/5w3ybt5gmscpvw8/ConeProject-1.jpg?dl=0httraw=1 Sent from the OpenSCAD mailing list archive at Nabble.com._______________________________________________ OpenSCAD mailing list To unsubscribe send an email to [hidden email]
Open this post in threaded view
|

## Re: Determining X and Y for the intersection of a conic section and rotated plane given Y

 Drawing the lines first isn't an option --- I need to match a differently cut part and need to get from the left (the tip of the cone) to the right (the ellipse where the cone and plane intersect at X and Z based on knowing Y (I'll be looping through). I've tried doing it w/ trigonometry, and it's a long series of nested calculations which seem cumbersome and slow to calculate even before I get halfway there.  William _______________________________________________ OpenSCAD mailing list To unsubscribe send an email to [hidden email]
Open this post in threaded view
|

## Re: Determining X and Y for the intersection of a conic section and rotated plane given Y

 I'm not sure if I really understand what you're trying to do, but it seems like a simple approach is to sweep over the lines on the cone and calculate their intersection with the plane.  The easiest way to do this I show below, which uses evenly spaced angles around the cone.  But you could sample some other way.  BOSL2 has code for line-plane intersection...or you can write your own if you prefer to do more work.   You could of course also draw the lines at full length (to the base of the cone) and then difference away the excess length, but it seems like there's some reason you don't want to do it that way?  As I said...I don't quite understand what you're trying to do.  Are you trying to intersect with something more complex than just a plane?   include\$fn=80; difference(){   translate([0, 0.125, 0.25])     rotate([0, 90, 0])     cylinder(r1=0, r2=0.125, h=(0.125 / tan(15)), center=false);   cube([1, 1, 0.25], center=false);   rotate([0, 45, 0])      cube([1, 1, 1], center=false); } plane = plane_from_normal([-1,0,1]); apex = [0, 1/8, 1/4]; rbase = 0.125; h = 0.125/tan(15); N = 16; base = [for(i=[0:1:N/2]) let(theta=360*i/N) apex+[h,rbase*cos(theta), rbase*sin(theta)]]; color("red")   for(pt=base){      int = plane_line_intersection(plane, [apex, pt]);      stroke([apex,int], width=0.005);   } OpenSCAD mailing list-2 wrote Drawing the lines first isn't an option --- I need to match a differently cut part and need to get from the left (the tip of the cone) to the right (the ellipse where the cone and plane intersect at X and Z based on knowing Y (I'll be looping through). I've tried doing it w/ trigonometry, and it's a long series of nested calculations which seem cumbersome and slow to calculate even before I get halfway there.  William _______________________________________________ OpenSCAD mailing list To unsubscribe send an email to [hidden email] Sent from the OpenSCAD mailing list archive at Nabble.com._______________________________________________ OpenSCAD mailing list To unsubscribe send an email to [hidden email]
Open this post in threaded view
|

## Re: Determining X and Y for the intersection of a conic section and rotated plane given Y

 Thank you. What I'm trying to do is to feed X and Z into a module along w/ Y so that I can write out the coordinates. Unfortunately, I can't figure out how to unwrap your code to fit the requirements of the module I worked up: include \$fn=80; difference(){   translate([0, 0.125, 0.25])     rotate([0, 90, 0])     cylinder(r1=0, r2=0.125, h=(0.125 / tan(15)), center=false);   cube([1, 1, 0.25], center=false);   rotate([0, 45, 0])      cube([1, 1, 1], center=false); } plane = plane_from_normal([-1,0,1]); apex = [0, 1/8, 1/4]; rbase = 0.125; h = 0.125/tan(15); N = 16; //base = [for(i=[0:1:N/2]) let(theta=360*i/N) apex+[h,rbase*cos(theta), rbase*sin(theta)]]; color("red") //  for(pt=base)     for(i=[0:1:N/2]) { //     int = plane_line_intersection(plane, [apex, pt]);      stroke([apex,plane_line_intersection(plane, [apex, pt])], width=0.005);   } I want to have separate access to the X, Y, and, Z coordinates: module cutv(bx, by, bz, ex, ey, ez, r, a) {   hull(){     translate([bx, by, bz]){       vendmill(r, a);     }     translate([ex, ey, ez]){       vendmill(r, a);     }   } } (see below for the dependencies) Eventually the module will be extended to write out the coordinates as G-Code using echo. Another limitation is I do most of my development in BlockSCAD, which I guess makes my code overly simplistic/procedural/stilted. William module vendmill(vr, va) {   union(){     removevshape(vr, va);     translate([0, 0, (calcVdepth(vr, va))]){       cylinder(r1=vr, r2=vr, h=st, center=false);     }   } } module removevshape(vr, va) {   cylinder(r1=0, r2=vr, h=(calcVdepth(vr, va)), center=false); } function calcVdepth(rad, an) = rad / tan(an); _______________________________________________ OpenSCAD mailing list To unsubscribe send an email to [hidden email]
Open this post in threaded view
|

## Re: Determining X and Y for the intersection of a conic section and rotated plane given Y

 Is the following correct? For a given value y, you want two formulae: x = Fx(y) and z = Fz(y) And it's important that your cone is orientated exactly as you have specified, rather than in some other position that might make the calculations easier? If Yes to both then I expect other functions in BOSL2 could deliver that, in the hands of somone like Adrian. But it should also be possible from first principles and grunt work. Sent from the OpenSCAD mailing list archive at Nabble.com._______________________________________________ OpenSCAD mailing list To unsubscribe send an email to [hidden email]