1
$\begingroup$

I'm currently trying to learn Mathematica, and I've got some linear algebra tasks to solve with it. I've gotten quite far but now I'm stuck on this one exercise. The instructions are:

With the help of Mathematica-commands, draw a new picture, where you can see the orthogonal projection of the vector onto the plane. It should look something like this: enter image description here

Now, I started out by drawing the vector in the 3D plane with this code:

Graphics3D [ { Thick , Arrow [ { { 0 , 0 , 0} , { 1 , −1 , 2 } } ] ,
InfinitePlane [ { { 1 , 0 , 0} , { 1 , 1 , 1} , { 0 , 0 , 1 } } ] } ,
Axes -> True , AxesLabel -> { "X" , "Y" , "Z" } ]

This gave me the 3D image in the picture above, without the projection (the dashed line) obviously. But now I'm stuck, and my question is, how would I get the orthogonal projection of the vector?

Thanks in advance.

$\endgroup$
8
  • $\begingroup$ Maybe it will help you to know the normal of the plane? You can obtain it by plane = InfinitePlane[{{1, 0, 0}, {1, 1, 1}, {0, 0, 1}}]; Normalize[ Cross[plane[[1, 2]] - plane[[1, 1]], plane[[1, 3]] - plane[[1, 1]]]]. $\endgroup$ Commented Jan 1, 2019 at 16:17
  • $\begingroup$ Sadly enough, that doesn't work for me. The result comes back saying "Part specification plane is longer than depth of the object." $\endgroup$
    – jhndoe2
    Commented Jan 1, 2019 at 17:03
  • $\begingroup$ Hm. Weird. Did you really execute all code I posted? $\endgroup$ Commented Jan 1, 2019 at 17:07
  • $\begingroup$ Ah, nevermind. I got it to work now. This gave me three normals, which all had the value of 1/Sqrt[3]. How do I proceed from here? $\endgroup$
    – jhndoe2
    Commented Jan 1, 2019 at 17:15
  • 1
    $\begingroup$ X-posted in Wolfram Community: community.wolfram.com/groups/-/m/t/1580738 $\endgroup$ Commented Jan 1, 2019 at 21:08

2 Answers 2

3
$\begingroup$

Try this version

p0 = {0, 0, 0};
p1 = {1, -1, 2};
p2 = {1, 0, 0};
p3 = {1, 1, 1};
p4 = {0, 0, 1}; 
gr1 = Graphics3D[{Thick, Arrow[{p0, p1}],InfinitePlane[{p2,p3,p4}]},Axes -> True, AxesLabel-> {"X", "Y","Z"}];
v = p1 - p0;
n1 = p2 - p3;
n2 = p3 - p4;
n = Cross[n1, n2];
pl = p0;
pp = p2;
equs = Thread[pl + lambda v == pp + mu n1 + nu n2];
sol = Solve[equs, {lambda, mu, nu}][[1]];
pb = p0 + lambda v /. sol;
vern = n/Norm[n];
prjn = (v.vern) vern;
prjP = v - prjn;
gr2 = Graphics3D[{Thick, Dashed, Red, Arrow[{pb, prjP + pb}]}];
gr3 = Graphics3D[{Thick, Green, Arrow[{pb, prjn}]}];
Show[gr1, gr2, gr3]

enter image description here

In green the component along the normal to the plane and in dashed red the projection onto the plane.

NOTE

The line segment $\mu p_0+(1-\mu)p_1$ for $0 \le \mu \le 1$ is supported by the line $L\to p_l + \lambda (p_1-p_0) = p_l + \lambda \vec v$. The plane containing the three points $p_2,p_3,p_4$ can be defined as $\Pi\to p_p+\mu(p_2-p_3)+\nu(p_3-p_4) = p_p + \mu\vec n_1+\nu\vec n_2$ The intersection point $p_b = L\cap\Pi$ is obtained by solving for $(\lambda^*,\mu^*,\nu^*)$ the linear system $p_l + \lambda \vec v = p_p + \mu\vec n_1+\nu\vec n_2$ and then $p_b = p_l+\lambda^* \vec v$ The plane normal is obtained as $\vec n = \vec n_1\times\vec n_2$ and the $\vec v$ component regarding $\vec n$ is obtained as $ \vec v_{\vec n} = \left(\vec v\cdot\frac{\vec n}{|\vec n|}\right)\frac{\vec n}{|\vec n|}$ and finally $\vec v_{\Pi} = \vec v-\vec v_{\vec n}$

$\endgroup$
5
  • $\begingroup$ Thank you for the answer! Let's see if I get the steps right. First you get the normal to the plane by taking the cross-product between n1 and n2. But here's where I kind of get lost. What does the following functions mean? Do you think you could explain the next couple of lines for me? I could just post this, but I want to understand aswell. Thank you very much. $\endgroup$
    – jhndoe2
    Commented Jan 2, 2019 at 14:58
  • $\begingroup$ @wznd Attached an explanation. $\endgroup$
    – Cesareo
    Commented Jan 2, 2019 at 15:54
  • $\begingroup$ Thank you for that. Now all I'm wondering is three lines of code, that I can't seem to understand, even with your great explanation. I'll post a picture with the lines of code that I don't understand. I don't know if it's to much to ask, but if it would be possible for you to explain the functions in words, or a bit simpler to a math novice like me, I'd greatly appreciate it. Here's the section that I don't really understand: gyazo.com/707fd1863efd810e6ea58f295651d5ef $\endgroup$
    – jhndoe2
    Commented Jan 2, 2019 at 16:03
  • $\begingroup$ @wznd Removing the semicolon at the end of the command facilitates the understanding. $\endgroup$
    – Cesareo
    Commented Jan 2, 2019 at 16:57
  • $\begingroup$ Yeah, I did that initially and it help somewhat. But I'm still unsure about what the equs, solve and prjn variables specifically mean/do. $\endgroup$
    – jhndoe2
    Commented Jan 2, 2019 at 17:20
2
$\begingroup$

The code in Cesareo's answer can be shortened slightly.

Using the same set of initial points as in the other answer:

p0 = {0, 0, 0}; p1 = {1, -1, 2}; p2 = {1, 0, 0}; p3 = {1, 1, 1}; p4 = {0, 0, 1};

Some intermediate vectors:

d = p1 - p0;
nrm = Cross[p2 - p3, p3 - p4];

Use RegionIntersection[] to find the point of intersection:

pin = First[RegionIntersection[InfinitePlane[{p2, p3, p4}], InfiniteLine[{p0, p1}]]]
   {1/4, -1/4, 1/2}

From there:

Graphics3D[{Arrow[Tube[{p0, p1}]], {Opacity[2/3], InfinitePlane[{p2, p3, p4}]},
            {Green, Arrow[Tube[{pin, pin + Normalize[nrm]}]]},
            {Red, Arrow[Tube[{pin, pin + d - Projection[d, nrm]}]]},
            {Blue, Sphere[pin, 0.03]}}, Axes -> True, AxesLabel -> {"X", "Y", "Z"}]

figure

Note the use of the Projection[] function.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.