Difference between revisions of "Asymptote: Useful functions"
(Added another example) |
(add function to mark angles) |
||
Line 1: | Line 1: | ||
{{Asymptote}} | {{Asymptote}} | ||
+ | __TOC__ | ||
+ | |||
+ | == Marking Angles == | ||
+ | The bundled <code>geometry</code> package provides a useful function for marking angles. | ||
+ | <blockquote> | ||
+ | void '''markangle'''(picture ''pic''=currentpicture,<br/> | ||
+ | Label ''L''="", int ''n''=1, real ''radius''=0, real ''space''=0,<br/> | ||
+ | line ''l1'', line ''l2'',<br/> | ||
+ | arrowbar ''arrow''=None, pen ''p''=currentpen,<br/> | ||
+ | margin ''margin''=NoMargin, marker ''marker''=nomarker) | ||
+ | </blockquote> | ||
+ | As with other angle functions, you can replace <code>line l1, line l2</code> with <code>pair A, pair O, pair B</code>, which would mark the angle <math>\angle AOB</math>. The function will draw an arc from line AO or l1 to line BO or l2, counterclockwise, with radius <math>\abs(\textrm{radius})</math> and label it with the provided <code>Label L</code>. | ||
+ | |||
+ | If the function draws the angle in the wrong direction, try swapping the first pair with the third pair, or, if you put in lines, swapping l1 and l2. | ||
+ | |||
+ | Here's an example to do that with an orange pen: | ||
+ | <pre><nowiki> | ||
+ | pair A = (1,1); | ||
+ | pair O = (0,0); | ||
+ | pair B = (2,0); | ||
+ | draw(O--A); | ||
+ | draw(O--B); | ||
+ | |||
+ | import geometry; | ||
+ | markangle("$45^o$", B, O, A, p=orange); | ||
+ | </nowiki></pre> | ||
+ | <asy> | ||
+ | pair A = (1,1); | ||
+ | pair O = (0,0); | ||
+ | pair B = (2,0); | ||
+ | draw(O--A); | ||
+ | draw(O--B); | ||
+ | |||
+ | import geometry; | ||
+ | markangle("$45^o$", B, O, A, p=orange); | ||
+ | </asy> | ||
== Intersection points == | == Intersection points == |
Revision as of 17:33, 8 February 2024
Contents
Marking Angles
The bundled geometry
package provides a useful function for marking angles.
void markangle(picture pic=currentpicture,
Label L="", int n=1, real radius=0, real space=0,
line l1, line l2,
arrowbar arrow=None, pen p=currentpen,
margin margin=NoMargin, marker marker=nomarker)
As with other angle functions, you can replace line l1, line l2
with pair A, pair O, pair B
, which would mark the angle . The function will draw an arc from line AO or l1 to line BO or l2, counterclockwise, with radius $\abs(\textrm{radius})$ (Error compiling LaTeX. Unknown error_msg) and label it with the provided Label L
.
If the function draws the angle in the wrong direction, try swapping the first pair with the third pair, or, if you put in lines, swapping l1 and l2.
Here's an example to do that with an orange pen:
pair A = (1,1); pair O = (0,0); pair B = (2,0); draw(O--A); draw(O--B); import geometry; markangle("$45^o$", B, O, A, p=orange);
Intersection points
pair[] intersectionpoints(path, path);
Examples:
size(8cm,0); import math; import graph; real r,s; pair a,b, common; path circ1, circ2; r=1; s=1; a=(0,0); b=(1,0); circ1=circle(a,r); circ2=circle(b,s); draw(circ1,linewidth(1bp)); draw(circ2,1bp+green); pair [] x=intersectionpoints(circ1, circ2); dot(x[0],3bp+blue); dot(x[1],3bp+blue); draw(x[0] -- x[1],1bp+red);
path g=(-3,-sqrt(3))--(3,-sqrt(3))--(0,2*sqrt(3))--cycle; draw(g,black); path p=-2/3*(-3,-sqrt(3))--(-2/3)*(3,-sqrt(3))--(-2/3)*(0,2*sqrt(3))--cycle; draw(p,black); pair [] x=intersectionpoints(g, p); fill(x[0]--x[1]--x[2]--x[3]--x[4]--x[5]--cycle,black); dot((0,0),white);
Note that this function will cause an error if the paths involved do not intersect.