Find the intersection of a line with a plane: Difference between revisions

Content deleted Content added
Walterpachl (talk | contribs)
m →‎{{header|REXX}}: disclaimer for line being parallel to or within the plane
Walterpachl (talk | contribs)
m →‎{{header|REXX}}: handle the case that the line is parallel to the plane or lies within it
Line 103: Line 103:


=={{header|REXX}}==
=={{header|REXX}}==
===version 1===
This program does NOT handle the case when the line is parallel to or within the plane.
This program does NOT handle the case when the line is parallel to or within the plane.
<lang rexx>/* REXX */
<lang rexx>/* REXX */
Line 123: Line 124:


Say 'Intersection: P('||x','y','z')'</lang>
Say 'Intersection: P('||x','y','z')'</lang>

{{out}}
{{out}}
<pre>0*x + 0*y + 1*z = 5
<pre>0*x + 0*y + 1*z = 5
Intersection: P(0,-5,5)</pre>
Intersection: P(0,-5,5)</pre>

===version 2===
handle the case that the line is parallel to the plane or lies withi it.
<br>Beautification of plane and line definitions is yet tbd.
<lang rexx>/*REXX*/
Parse Value '1 2 3' With n.1 n.2 n.3
Parse Value '3 3 3' With p.1 p.2 p.3
Parse Value '0 2 4' With a.1 a.2 a.3
Parse Value '3 2 1' With v.1 v.2 v.3

a=n.1
b=n.2
c=n.3
d=n.1*p.1+n.2*p.2+n.3*p.3 /* Parameter form of the plane */
pd=''
If a<>0 Then pd=a'*x'
If b<>0 Then pd=pd '+' b'*y'
If c<>0 Then pd=pd '+' c'*z'
Say 'Plane''s definition:' pd '=' d

ip=0
Do i=1 To 3
ip=ip+n.i*v.i
dd=n.1*a.1+n.2*a.2+n.3*a.3
End
If ip=0 Then Do
If dd=d Then
Say 'Line is part of the plane'
Else
Say 'Line is parallel to the plane'
Exit
End

t=(d-(a*a.1+b*a.2+c*a.3))/(a*v.1+b*v.2+c*v.3)

x=a.1+t*v.1
y=a.2+t*v.2
z=a.3+t*v.3

ld='x='a.1; If v.1<>0 Then ld=ld'+t*'v.1
ld=ld '; y='a.2; If v.2<>0 Then ld=ld'+t*'v.2
ld=ld '; z='a.3; If v.3<>0 Then ld=ld'+t*'v.3
Say 'Line definition:' ld

Say 'Intersection: P('||x','y','z')'</lang>
{{out}}
<pre>Plane's definition: 1*x + 2*y + 3*z = 18
Line definition: x=0+t*3 ; y=2+t*2 ; z=4+t*1
Intersection: P(0.6,2.4,4.2)</pre>


=={{header|Sidef}}==
=={{header|Sidef}}==