3

I want to use MetaPost to draw a right angle BAC. A = (20,30), B = (0,0), the top of the angle is point A.

How can I compute the coordinate of point C?

The Right Angle

4
  • Angle's top is on which point?
    – Thanos
    Nov 3 '12 at 12:21
  • It is point A. Nov 3 '12 at 12:22
  • since the right angle B is at origin, you can have C at (-20,30) or (20,-30) based on A's coordinate.
    – mythealias
    Nov 3 '12 at 12:36
  • Oops, I made a terrible typo. In fact, I want to draw right angle BAC. Nov 3 '12 at 12:41
9

You can use dotprod:

u:=1mm;
beginfig(1);
z0=origin;
z1=(20u,30u);
y2=y0;
(z1-z0) dotprod (z2-z1)=0;
draw z0--z1--z2--cycle;
endfig;
end.
1

run with xelatex

\documentclass[a4paper,10pt]{article}
\usepackage{pstricks-add}
\def\drawAngle(#1)(#2){%
\psnode(#1){A}{A}\psnode(#2){B}{B}
\psnode(!\psGetNodeCenter{A}\psGetNodeCenter{B}
       A.y B.y sub A.x add A.x B.x sub neg A.y add ){C}{C}
\psline(B)(A)(C)
\psarc(A){1}{!\psGetNodeCenter{A}\psGetNodeCenter{B}
  B.y A.y sub B.x A.x sub atan}{!B.y A.y sub B.x A.x sub atan 90 add}%
}
\begin{document}
\begin{pspicture}[showgrid](0,-3)(4,3)
\drawAngle(1,2)(2,-2)
\psset{linecolor=red}
\drawAngle(4,-1)(2,1)
\end{pspicture}
\end{document}

enter image description here

2
  • I use MetaPost only. Nov 3 '12 at 13:10
  • should not be difficult to write \drawAngle in Metapost. You can use B.x also in MP.
    – user2478
    Nov 3 '12 at 13:19
1

Just 4 fun with PSTricks:

enter image description here

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-eucl}
\begin{document}
\begin{pspicture}(6.6,3)
\psset{PointSymbol=none}
\pstGeonode[PosAngle={45,-135}](2,3){A}(0,0){B}
\pstRotation[RotAngle=90,PointName=none]{A}{B}
\pnode(A|B){B''}
\pstInterLL{A}{B'}{B}{B''}{C}
\pspolygon(A)(B)(C)
\pstRightAngle{B}{A}{C}
\end{pspicture}
\end{document}

Descriptions:

  • \psset{PointSymbol=none} to turn the dots off.

  • \pstGeonode[PosAngle={45,-135}](2,3){A}(0,0){B} to specify the point A and B.

  • \pstRotation[RotAngle=90,PointName=none]{A}{B} to rotate point B 90 degrees about A, the new point is implicitly named as B'.

  • \pnode(A|B){B''} to define an auxiliary point B'' whose coordinate is (A.x,B.y).

  • \pstInterLL{A}{B'}{B}{B''}{C} to find the intersection point C between the lines AB' and BB''.

  • \pspolygon(A)(B)(C) to draw the triangle ABC.

  • \pstRightAngle{B}{A}{C} to attach the L-shape right angle mark.

1
  • 1
    I'm using MetaPost, but it's really a good tutorial! Nov 9 '12 at 8:41
0

First of all you understand that there are infinite point that are perpindicular to AB. So actually you are looking for a line. To find it, just assume the vector AB with coordinates BA=(20-0,30-0)=(20,30)=a and vector BC=(x-0, y-0)=(x,y)=b.

To find vector coordinates you just apply (xend-xstart, yend-ystart). The requirement you have is that a and b must be perpendicular. In vector analysis, this means that the dot product must be zero, ie

a.b=0-> 
(20,30).(x,y)=0->20x+30y=0->
y=-(2/3)x

So choose an x apply the previous line equation and you'll get your y.

Edit: I saw you changed your question. In that way you will have a new line with same slope but with different intercept. So your line will be something like

y=ux+w

with u being the same slope, u=-2/3, that is. On the same time it should pass from point A so this point has to be a solution of the line. So replacing A's coordinates in line equation you'll get

30=-(2/3)20+b->
...->
b=130/3

So your new line is

y=-(2/3)x+130/3

Again for every x you'll get a y.

1
  • Can I write a MetaPost macro to solve it? Nov 3 '12 at 13:00

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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