Forgot password?
 Create new account
Author: abababa

学习Asymptote时的一些问题

[Copy link]

3148

Threads

8489

Posts

610K

Credits

Credits
66148
QQ

Show all posts

hbghlyj Posted at 2023-3-15 20:13:00
abababa 发表于 2023-3-15 08:04
原来如此,感觉还是字符型的好用,不会重复。
什么是“字符型的” ?

418

Threads

1627

Posts

110K

Credits

Credits
11886

Show all posts

 Author| abababa Posted at 2023-3-15 20:15:09
hbghlyj 发表于 2023-3-15 20:11
,,都对应于Asymptote的吗?
interLL是直线相交,对应的应该是不带s的那个,返回的是单个的点,带s的那个返回的是点的数组,interLC和interCC应该返回数组。

418

Threads

1627

Posts

110K

Credits

Credits
11886

Show all posts

 Author| abababa Posted at 2023-3-15 20:19:09
hbghlyj 发表于 2023-3-15 20:13
什么是“字符型的” ?
就是像这样的:label("$A$",A,align="SW");把那个SW加引号就是字符了吧,这样不就不会冲突了吗。

3148

Threads

8489

Posts

610K

Credits

Credits
66148
QQ

Show all posts

hbghlyj Posted at 2023-3-15 20:23:01
abababa 发表于 2023-3-15 13:19
就是像这样的:label("$A$",A,align="SW");把那个SW加引号就是字符了吧,这样不就不会冲突了吗。 ...
“align=<pair>”有一方便之处:
P是已定义的点
那么align=P就可以使标签放在OP方向
绕圆周加标签:

418

Threads

1627

Posts

110K

Credits

Credits
11886

Show all posts

 Author| abababa Posted at 2023-3-16 18:24:17
hbghlyj 发表于 2023-3-15 20:23
“align=”有一方便之处:
P是已定义的点
那么align=P就可以使标签放在OP方向
这有什么用啊,一般的几何题目,那些点的方向都没这么有规律,而且这个还可以定义成任意方向吧,比如点O=(1,2),画一个圆O,上面画一些点P,标签的时候P-O就是OP的方向了吧。
觉得定义两个同名的命令,然后传进去什么样的就用什么,这样更好。

418

Threads

1627

Posts

110K

Credits

Credits
11886

Show all posts

 Author| abababa Posted at 2023-3-16 19:30:30

几个新问题

几个新问题:
1.能不能一次画很多点和线段?比如我定义了点A,B,C,D,E,然后定义了线段AB,BC,CA,AD,AE,我想一次把它们全画出来,有没有像这样的:
dot(A,B,C,D,E,p=blue);
我知道用循环可以画,但循环里也要重新弄一个数组才能行吧。

2.直线和圆锥曲线一般有两个交点,定义时可以是
point[] ps=intersectionpoints(l,c);但是我取点时,怎么判断哪个是ps[0]哪个是ps[1]呢?一定要画出来才能知道吗?

418

Threads

1627

Posts

110K

Credits

Credits
11886

Show all posts

 Author| abababa Posted at 2023-3-18 14:05:23

怎么能画一个“全”的抛物线?

怎么能画一个“全”的抛物线?代码如下,画出来只有上半平面的部分,看不出是一个抛物线,怎么能把抛物线的下半平面部分也显示出来呢?虽然这部分没什么用。
  1. \begin{asy}
  2. size(4cm,0);
  3. point F=(1.5,0);
  4. line l=line((0,0),(0,1));
  5. parabola p=parabola(F,l);
  6. point P=(3,3*sqrt(3)/2);
  7. point A=prepAt(P,l);
  8. line m=tangents(p,P)[0];
  9. point T=intersectionpoint(l,m);
  10. segment PT=segment(P,T);
  11. segment PA=segment(P,A);
  12. segment FT=segment(F,T);
  13. segment FA=segment(F,A);
  14. currentpen=darkgreen;
  15. draw(p);
  16. draw(l);
  17. draw(PT);
  18. draw(PA);
  19. draw(FT);
  20. draw(FA);
  21. currentpen=blue;
  22. dot(F);
  23. dot(P);
  24. dot(A);
  25. dot(T);
  26. currentpen=blue+fontsize(10);
  27. label("$A$",A,align=W);
  28. label("$F$",F,align=E);
  29. label("$P$",P,align=N);
  30. label("$T$",T,align=W);
  31. \end{asy}
Copy the Code

701

Threads

110K

Posts

910K

Credits

Credits
94145
QQ

Show all posts

kuing Posted at 2023-3-18 17:05:07
abababa 发表于 2023-3-18 14:05
怎么能画一个“全”的抛物线?代码如下,画出来只有上半平面的部分,看不出是一个抛物线,怎么能把抛物线的 ...
最好把需要 import 什么也写出来先。

418

Threads

1627

Posts

110K

Credits

Credits
11886

Show all posts

 Author| abababa Posted at 2023-3-18 17:31:31
kuing 发表于 2023-3-18 17:05
最好把需要 import 什么也写出来先。
我明白了,我还是像之前那样,把那个总的定义写在单独的一个文件里了,需要引用的包(还有一些自定义命令)如下:
  1. \begin{asydef}
  2. settings.prc = true;
  3. import three;
  4. import math;
  5. import geometry;
  6. import texcolors;
  7. //过C作l的垂线,返回垂线
  8. line prepLine(point C, line l) {
  9.         return perpendicular(C, l);
  10. }
  11. //过C作l的垂线,返回垂足
  12. point prepAt(point C, line l) {
  13.         line m=perpendicular(C, l);
  14.         return intersectionpoint(m, l);
  15. }
  16. \end{asydef}
Copy the Code

701

Threads

110K

Posts

910K

Credits

Credits
94145
QQ

Show all posts

kuing Posted at 2023-3-18 17:59:01
看起来画这条抛物线的时候也是当前区域有多大就画到多大,不会延长开去(之前 drawline 的时候也是这样,所以我在 9# 的例子里也得先画条不显示的线来撑大区域)

701

Threads

110K

Posts

910K

Credits

Credits
94145
QQ

Show all posts

kuing Posted at 2023-3-18 18:23:31
abababa 发表于 2023-3-18 14:05
怎么能画一个“全”的抛物线?代码如下,画出来只有上半平面的部分,看不出是一个抛物线,怎么能把抛物线的 ...
仿 9# 加一句:
dot((0,-1),invisible);
就可以了,似乎在哪加都行,不必在画抛物线之前。
看来 asy 的画图机制与 tikz 有很大不同,因此刚才说“当前区域”也不准确。

418

Threads

1627

Posts

110K

Credits

Credits
11886

Show all posts

 Author| abababa Posted at 2023-3-18 19:12:43
kuing 发表于 2023-3-18 18:23
仿 9# 加一句:
dot((0,-1),invisible);
就可以了,似乎在哪加都行,不必在画抛物线之前。
原来如此,刚才试了加虚拟线的那个,已经出来了,原来画一个点也管用。

3148

Threads

8489

Posts

610K

Credits

Credits
66148
QQ

Show all posts

hbghlyj Posted at 2023-3-20 17:55:15

使用xlimits和ylimits

418

Threads

1627

Posts

110K

Credits

Credits
11886

Show all posts

 Author| abababa Posted at 2023-3-21 21:46:16
网友提供的两个命令,作极点极线的:
  1. /**
  2. * 取得点 p 关于圆锥曲线 c 的极线
  3. * @point p 点 p
  4. * @conic c 圆锥曲线 c
  5. * @return 返回点 p 关于圆锥曲线 c 的极线
  6. */
  7. line polar(point p, conic c) {
  8.         bqe obqe = equation(c);
  9.         real A = obqe.a[0], B = obqe.a[1], C = obqe.a[2], D = obqe.a[3], E = obqe.a[4], F = obqe.a[5];
  10.         real x = p.x, y = p.y;
  11.         return line((2*A*x+B*y+D), (B*x+2*C*y+E), (D*x+E*y+2*F));
  12. }
  13. /**
  14. * 取得直线 l 关于圆锥曲线 c 的极点
  15. * @line l 直线 l
  16. * @conic c 圆锥曲线 c
  17. * @return 返回直线 l 关于圆锥曲线 c 的极点
  18. */
  19. point pole(line l, conic c) {
  20.         bqe obqe = equation(c);
  21.         real A = obqe.a[0], B = obqe.a[1], C = obqe.a[2], D = obqe.a[3], E = obqe.a[4], F = obqe.a[5];
  22.         real a = l.a, b = l.b, c =l.c;
  23.         real m = a*(B*E-2*C*D)+b*(B*D-2*A*E)+c*(4*A*C-B*B);
  24.         point p = ((a*(4*C*F-E*E)+b*(D*E-2*B*F)+c*(B*E-2*C*D))/m, (a*(D*E-2*B*F)+b*(4*A*F-D*D)+c*(B*D-2*A*E))/m);
  25.         return p;
  26. }
Copy the Code

418

Threads

1627

Posts

110K

Credits

Credits
11886

Show all posts

 Author| abababa Posted at 2023-3-27 17:58:22
碰到一个立体几何题,想用Asymptote画出来。
题:四面体$A_1A_2A_3A_4$四个面的面积相等,求证四个面全等。
作图:设四面面积都为$S$,作底面$A_2A_3A_4$的高$A_1H=h$,设以$A_iA_j$为棱的两个面所成的二面角为$x_{ij}$。设$A_1H_2, A_3H_4$分别为$\triangle A_1A_3A_4, \triangle A_3A_1A_2$的高。

用Asymptote画图的代码:
  1. \begin{asydef}
  2. import three;
  3. import math;
  4. import geometry;
  5. import graph3;
  6. import texcolors;
  7. \end{asydef}
  8. \begin{asy}
  9. triple A1 = (1,sqrt(1/3),sqrt(8/3)), A2 = (0,0,0), A3 = (2,0,0), A4 = (1,sqrt(3),0);
  10. draw(A1--A2--A3--A4--cycle);
  11. axes3("$x$","$y$","$z$",Arrow3);
  12. \end{asy}
Copy the Code



我想先把坐标轴画出来,再画一个正四面体(满足题目要求的不一定是正四面体),然后再作垂线。但第一步画几个点的连线就不行,是哪里的问题呢?

3148

Threads

8489

Posts

610K

Credits

Credits
66148
QQ

Show all posts

hbghlyj Posted at 2023-3-27 18:00:47
abababa 发表于 2023-3-27 10:58
但第一步画几个点的连线就不行

418

Threads

1627

Posts

110K

Credits

Credits
11886

Show all posts

 Author| abababa Posted at 2023-3-27 18:24:31
这个在我这里运行,出现以下问题:
shipout3(prefix,f,preview ? nativeformat() : format,

我的my.tex文件如下:
  1. \documentclass[12pt]{article}
  2. \usepackage{amsmath,bm,yhmath,amssymb,etoolbox,esvect,stmaryrd,cite,enumitem,extarrows,mathtools,ifthen}
  3. \usepackage[amsmath, thmmarks]{ntheorem}
  4. {
  5.         \theoremstyle{nonumberplain}
  6.         \theoremheaderfont{\indent\bfseries}
  7.         \theorembodyfont{\normalfont}
  8.         \theoremsymbol{\ensuremath{\Box}}
  9.         \newtheorem{proof}{证明}
  10. }
  11. \usepackage[inline]{asymptote}
  12. \begin{document}
  13. \begin{asy}
  14. import three;unitsize(1cm);
  15. triple A1 = (1,sqrt(1/3),sqrt(8/3)), A2 = (0,0,0), A3 = (2,0,0), A4 = (1,sqrt(3),0);
  16. draw(A1--A2--A3--A4--cycle);
  17. \end{asy}
  18. \end{document}
Copy the Code


编译是用xelatex my.tex,然后asy *.asy(这时就出问题了),最后再xelatex my.tex

418

Threads

1627

Posts

110K

Credits

Credits
11886

Show all posts

 Author| abababa Posted at 2023-4-3 21:27:11
abababa 发表于 2023-3-27 18:24
这个在我这里运行,出现以下问题:
shipout3(prefix,f,preview ? nativeformat() : format,
搜索到两个类似的:
lists.debian.org/debian-tex-maint/2022/11/msg00079.html
github.com/vectorgraphics/asymptote/issues/238

还是不知道怎么解决,但是看样子和版本有关?我的是
Asymptote version 2.78

418

Threads

1627

Posts

110K

Credits

Credits
11886

Show all posts

 Author| abababa Posted at 2023-4-4 17:22:12
abababa 发表于 2023-4-3 21:27
搜索到两个类似的:
https://lists.debian.org/debian-tex-maint/2022/11/msg00079.html
https://github. ...
安装了最新的texlive,asy版本已经升级到2.85,但还是不行。
我搜到下面这帖:
tex.stackexchange.com/questions/592394/using- … ymptote-for-3d-plots

里面说设置settings.outformat = "html";这一句,然后把settings.prc = true;改成false,这时先xelatex my.tex,再asy *.asy,是能看到my-1.html,打开这个网页文件,里面就有那个图。但再次用xelatex my.tex编译,却不能把这个图弄到my.pdf里。

67

Threads

435

Posts

4269

Credits

Credits
4269

Show all posts

hejoseph Posted at 2023-4-4 17:36:31
Last edited by hejoseph at 2023-4-4 17:42:00
abababa 发表于 2023-4-4 17:22
安装了最新的texlive,asy版本已经升级到2.85,但还是不行。
我搜到下面这帖:
tex.stackexchang ...
我这里没问题,不知道你那里什么问题。ASY嵌入文档的应该是my-1_0.pdf这个文件吧。
如果你只是插图完全可以画成平面图就得了,不一定要三d图。

如果你是windows的机器,看看你的环境变量设置对了没有,自己安装asymptote有可能会有问题,用系统自带的就行了。
1.png

手机版Mobile version|Leisure Math Forum

2025-4-20 12:21 GMT+8

Powered by Discuz!

× Quick Reply To Top Return to the list