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

m
→‎{{header|REXX}}: handle the case that the line is parallel to the plane or lies within it
m (→‎{{header|REXX}}: disclaimer for line being parallel to or within the plane)
m (→‎{{header|REXX}}: handle the case that the line is parallel to the plane or lies within it)
Line 103:
 
=={{header|REXX}}==
===version 1===
This program does NOT handle the case when the line is parallel to or within the plane.
<lang rexx>/* REXX */
Line 123 ⟶ 124:
 
Say 'Intersection: P('||x','y','z')'</lang>
 
{{out}}
<pre>0*x + 0*y + 1*z = 5
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}}==
2,300

edits