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
    Commented Nov 3, 2012 at 12:21
  • It is point A. Commented Nov 3, 2012 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
    Commented Nov 3, 2012 at 12:36
  • Oops, I made a terrible typo. In fact, I want to draw right angle BAC. Commented Nov 3, 2012 at 12:41

4 Answers 4

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. Commented Nov 3, 2012 at 13:10
  • should not be difficult to write \drawAngle in Metapost. You can use B.x also in MP.
    – user2478
    Commented Nov 3, 2012 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! Commented Nov 9, 2012 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? Commented Nov 3, 2012 at 13:00

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .