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}}== |