Mal,
I attached the solution as a .txt file to my last post. If you are using
NNTP (a dedicated newsreader) to browse this newsgroup, you should be able
to detach the txt file and open it in Notepad or a facsimile thereof.
If you are using the HTTP (web based) forum, I am not sure how you access an
attachment.
Normally I would send it to customer-files, but since you are probably the
only one interested in it, I have pasted into this message below. If it
does not format well in your reader, let me know and I will email directly
to you.
As I though about it, another application might be in gravity sewer design,
where one may want to know how to run a lateral at a minimum percent to
intersect the main line.
sc
-------------------------------------------------------------------
CONE-LINE INTERSECTION
STEPHEN CANNON
APRIL, 2002
VECTOR EQUATION
ORIGIN: E=(XE,YE,ZE); OFFSET: D=(XD,YD,ZD)
PARAMETRIC FORM: P(t) = E + tD; WHICH IS EQUAL TO THE THREE EQUATIONS:
(1) X(t) = XE + tXD
(2) Y(t) = YE + tYD
(3) Z(t) = ZE + tZD
CONE EQUATION
UNIT CONE LOCATED @ (0,0,0):
(4) X^2 + Y^2 = Z^2
UNIT CONE LOCATED @ (0,0,0) AND SCALED:
(5) X^2 + Y^2 = kZ^2
INSERTING EQUATIONS (1),(2), AND (3) INTO (5):
(6) (XE+tXD)^2 + (YE+tYD)^2 = k(ZE+tZD)^2
REDUCING (6):
(7) t^2(XD^2+YD^2-kZD^2) + t(2XEXD+2YEYD-2kZEZD) + (XE^2+YE^2-kZE^2)
THIS TAKES THE QUADRATIC FORM OF
(8) At^2 + Bt + C; WHERE
(9) A = XD^2+YD^2-kZD^2
(10) B = 2XEXD+2YEYD-2kZEZD
(11) C = XE^2+YE^2-kZE^2
THE SOLUTION TO A QUADRATIC EQUATION IS:
(12) t = (-B +- ((B^2 - 4AC)^.5))/2A
THERE WILL BE TWO SOLUTIONS FOR t; t1 AND t2. THIS CORRESPONDS TO THE CONIC
CUTTING PLANE IN WHICH THE VECTOR IS LOCATED. A COMPLEX SOLUTION WILL
INDICATE
NO SOLUTION IN 3D SPACE.
EQUATION (12) GIVES ME THE SOLUTION FOR THE INTERSECTION OF A VECTOR AND
CONE,
WHERE THE VERTEX OF THE CONE IS AT (0,0,0), AND HAS A UNIT SCALE OF 1. PRIOR
TO COMPUTING THE INTERSECTION THE CONE AND VECTOR WITH OBJECTS LOCATED
ELSEWHERE
IN 3D-SPACE, THE OBJECTS NEED TO BE TRANSFORMED:
(1) BOTH OBJECTS NEED TO BE TRANSLATED SO THAT THE VERTEX OF THE CONE
IS AT (0,0,0).
(2) THE CONE NEEDS TO BE SCALED TO REPRESENT THE REQUIRED SLOPE OF THE
PROBLEM. THE CONSTANT k IN EQUATION (5) IS COMPUTED AS:
(13) K = (100/slope in percent)^2
****************************************************************************
*****
PROBLEM:
GIVEN A POINT IN 3D-SPACE AT (1.045,2.305,1.04) FIND WHERE A 3% SLOPE
INTERSECTS
A VECTOR WHOSE ORIGIN IS (1,1,1), AND CONTAINS A POINT (1.99,1.99, 1.028)
ALONG THE
VECTOR.
SOLUTION:
I WAS CONCERNED WITH THE POTENTIAL FOR ROUNDING AND COMPUTATIONAL ERRORS, SO
I SET UP
THE FOLLOWING SIMPLE TEST PROGRAM IN HTB BASIC TO SIMPLIFY MY TASK OF
COMPUTATIONS.
THE EQUATIONS SHOULD VERY EASILY TRANSLATE INTO VBA OR LISP.
LINE-CONE INTERSECTION
STEPHEN CANNON
APRIL, 2002
10 OPTION BASE 1
20 !
30 REAL Px,Py,Pz,P1x,P1y,P1z,P2x,P2y,P2z
40 REAL Xe,Ye,Ze,Xd,Yd,Zd,K,A,B,C,T1,T2
50 !
60 !
70 Px=1.045 ! Fixed Point x
80 Py=2.305 ! Fixed Point y
90 Pz=1.04 ! Fixed Point z
100 P1x=1.0 ! Vector Origin x
110 P1y=1.0 ! Vector Origin y
120 P1z=1.0 ! Vector Origin z
130 P2x=1.99 ! Point on Vector x
140 P2y=1.99 ! Point on Vector y
150 P2z=1.028 ! Point on Vector z
160 Xe=P1x-Px ! Translate Vector Origin
170 Ye=P1y-Py ! Translate Vector Origin
180 Ze=P1z-Pz ! Translate Vector Origin
190 Xd=P2x-P1x ! Vector Delta x
200 Yd=P2y-P1y ! Vector Delta y
210 Zd=P2z-P1z ! Vector Delta z
220 K=(100/3)^2 ! Cone Scale Factor: (100/slope in percent)^2
230 !
240 !
250 A=(Xd*Xd)+(Yd*Yd)-(K*(Zd*Zd)) ! Quadratic Coefficient A
260 B=(2*Xe*Xd)+(2*Ye*Yd)-(2*K*Ze*Zd) ! Quadratic Coefficient B
270 C=(Xe*Xe)+(Ye*Ye)-(K*Ze*Ze) ! Quadratic Coefficient C
280 !
290 !
300 T1=((B*(-1)+((B*B)-(4*A*C))^.5))/(2*A) ! Solve Quadratic + option
310 ! Might need to trap for
complex no.
320 T2=((B*(-1)-((B*B)-(4*A*C))^.5))/(2*A) ! Solve Quadratic - option
330 ! Might need to trap for
complex no.
340 !
350 !
360 P3x=P1x+(T1*Xd) ! Intersection Point X
370 P3y=P1y+(T1*Yd) ! Intersection Point Y
380 P3z=P1z+(T1*Zd) ! Intersection Point Z
390 PRINT P3x;P3y;P3z ! Solution #1
400 !
410 !
420 P4x=P1x+(T2*Xd) ! Intersection Point X
430 P4y=P1y+(T2*Yd) ! Intersection Point Y
440 P4z=P1z+(T2*Zd) ! Intersection Point Z
450 PRINT P4x;P4y;P4z ! Solution #2
460 STOP
470 END
RESULTS:
P3 = (1.35284914234,1.35284914234,1.0099795717)
P4 = (0.814510934383,0.814510934383,0.994753844609)
P3 IS VERY CLOSE TO THE PUBLISHED RESULTS: (1.354,1.354,1.01). I FEEL THE
DIFFERENCES
MAY BE DUE TO ROUNDING INDUCED ERROR IN THE HAND CALCULATION.
P4 IS ALSO A VALID SOLUTION, IT EXISTS ALONG THE SAME CONSTRUCTION LINE AS
THE
INITIAL VECTOR, IT IS SIMPLY LEFT OF THE VECTOR'S ORIGIN.
TWO SOLUTIONS ARE GOING TO BE NORMAL FOR CASES WHERE THE VECTOR LIES IN A
PLANE THAT
PRODUCES A CONIC SLICE EQUIVALENT TO A CIRCLE, ELLIPSE, PARABOLA OR
HYPERBOLA. IF THE
VECTOR IS TANGENT TO THE CONIC SLICE, THEN THERE WILL BE ONLY ONE SOLUTION.
NO SOLUTIONS (COMPLEX NUMBERS) WILL BE NORMAL IF THE VECTOR LIES IN A PLANE
THE IS
PARALLEL TO THE DIRECTRIX OF THE CONE.