找回密码
 快速注册
搜索
查看: 456|回复: 150

Asymptote测试

[复制链接]

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

hbghlyj 发表于 2022-6-3 10:15 |阅读模式
本帖最后由 hbghlyj 于 2025-3-2 15:10 编辑


Asymptote代码:

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

kuing 发表于 2023-1-10 19:58



import graph;draw(graph(new real(real x){return exp(-x^2/2)/sqrt(2pi);},-5,5),heavyred+1);
unitsize(0.8cm,4cm);
draw((-5.2,-0.05)--(5.2,-0.05)--(5.2,0.45)--(-5.2,0.45)--cycle);
for(int i=0;i<6;i+=2){label("0."+(string)i,(-5.2,0.1i),align=W);}
for(int i=-5;i<6;++i){label((string)i,(i,-0.05),align=S);}
label("$x$",(0,-0.15),align=S);
label("$\mu=0,\;\sigma^2=1>0,          \&$",(3,0.3));


点评

好啊  发表于 2023-1-10 19:58

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

kuing 发表于 2023-1-10 23:49
  1. <script>
  2. let asys = document.getElementsByTagName('asy');
  3. for (let item of asys) {
  4.         //item.innerHTML=item.innerHTML.replace(/&nbsp;/g,' ');
  5.         //var str = item.innerText;
  6.         var str = item.textContent;
  7.         console.log(str);
  8.         //var str = item.innerHTML.replace(/<br>/g, "").replace(/&nbsp;/g,' ').replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&amp;/g, "&");
  9.         var str_for_show = encodeURI(str).replace(/\'/g,'’');
  10.         var str_for_link = encodeURIComponent(str);
  11.         item.innerHTML = '<img src="https://kuing.cjhb.site/asy/?code='+str_for_link+'" onclick="show_tikz_window(\''+str_for_show+'\');" />';
  12. }
  13. </script>
复制代码

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2023-1-10 23:52
kuing 发表于 2023-1-10 16:49
let asys = document.getElementsByTagName('asy');
for (let item of asys) {
        var str = item.innerHTML ...

我觉得
  1. var str = item.innerHTML.replace(/<br>/g, "").replace(/&nbsp;/g,' ');
复制代码
可以用innerText或textContent写成
  1. var str = item.innerText;
复制代码

点评

哦  发表于 2023-1-11 00:04

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

kuing 发表于 2023-1-11 00:47
hbghlyj 发表于 2023-1-10 23:52
我觉得可以用innerText或textContent写成


&nbsp; 还是有必要替换掉的,否则转换后它会变成 %C2%A0 ,从而在图中会产生真的空格。

test:
import venn;

import math;
add( scale(1cm) * grid(7, 7, gray) );
add( shift(0,3cm) * rotate(-aTan(3/4)) * scale(1cm) * grid(5, 5, gray) );
fill( box((3cm,3cm), (4cm,4cm)), opacity(0.5)+yellow );
filldraw( (4cm,0) -- (4cm,3cm) -- (0,3cm) -- cycle
^^ (7cm,4cm) -- (4cm,4cm) -- (4cm,0) -- cycle
^^ (3cm,7cm) -- (3cm,4cm) -- (7cm,4cm) -- cycle
^^ (0,3cm) -- (3cm,3cm) -- (3cm,7cm) -- cycle,
fillpen=opacity(0.1)+red, drawpen=red+0.5mm );

(《Asymptote 范例教程》里的例子)

点评

哦  发表于 2023-1-11 00:56

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2023-1-28 18:34
@kuing

用同样的方法利用mpppreview可以使论坛支持metapost
同样地, 发送一个post请求, mpsource参数是代码😃

点评

不搞了😌  发表于 2023-1-28 22:38

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2023-2-18 20:22

3D图

import three;
size(200);
currentprojection=orthographic(1/2,-1,1/2);
defaultpen(linewidth(0.7));
real r=1,H=2;
triple O=(0,0,0), A=(r,0,0), B=(0,0,H), C=(r,0,H);
draw(surface(B--C--C+(0,0,-0.2)--B+(0,0,-0.2)--cycle),paleyellow,nolight);
draw(surface(O--A--C--B--cycle),paleyellow,nolight);
draw(B--O--A);
draw(O--B,dashed);
draw(A--C,dashed);
draw(C--B,dashed);
draw(circle((r,0,H/2),r),dashed);
label("$r$",(r/2,0,H),N);
label("$H$",(0,0,H/2),W);
label("$O$",(0,0,0),SE);
label("$A$",(r,0,0),S);
label("$B$",(0,0,H),N);
label("$C$",(r,0,H),NE);

检查这个svg发现它内含一个base64的jpg
Asymptote三维图不能输出矢量图, 只能输出位图.
使用format=png :

使用HTML格式, 用光标拖动可以旋转视角

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

kuing 发表于 2023-4-19 12:00
“挤楼”测试。

看看能否把下面两层(textContent 和 2行简化1行 的建议)给挤下去😉

失败了😌

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2023-4-19 19:31
hbghlyj 发表于 2023-1-10 16:52
我觉得可以用innerText或textContent写成

使用textContent的优点是保留换行\n😀
若使用innerText则\n都会变成空格,导致代码中的单行注释把后面所有行都注释了

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2023-4-19 19:36
kuing.cjhb.site/kk/zdy3pc.js
  1.     item.innerHTML = item.innerHTML.replace(/&nbsp;/g,' ');
  2.     var str = item.textContent;
复制代码

这2行应该可以简化为1行吧
  1.     var str = item.textContent.replace(/\\u00a0/g, " ")
复制代码

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

kuing 发表于 2023-11-20 15:47
貌似挂了,这帖只有 7# 用 format=png 那图能显示,其他都不行,不知为啥。

而 1# 的三个提交,第二个也出错,看来是 svg 不行?

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

kuing 发表于 2023-11-21 14:12
本帖最后由 kuing 于 2023-11-21 14:21 编辑
kuing 发表于 2023-11-20 15:47
貌似挂了,这帖只有 7# 用 format=png 那图能显示,其他都不行,不知为啥。

而 1# 的三个提交,第二个也出 ...


不是 svg 不行,而是似乎现在必须指定 format 😳

那尝试将自定义 js 里的其中一行改成
  1. item.innerHTML = '<img src="/asy/?format=svg&code='+str_for_link+'" onclick="show_tikz_window(\''+str_for_show+'\');" />';
复制代码


现在是有时行有时不行😳每次刷新都不一定同😳

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2024-1-31 17:04
提個小建議
  1. <a href="javascript:;" class="flbc" style="float:right;margin:3px 6px 0 0;" onclick="close_tikz_window();">
复制代码

可簡化為
  1. <a href="javascript:close_tikz_window();" class="flbc" style="float:right;margin:3px 6px 0 0;">
复制代码

点评

明白了😊  发表于 2024-1-31 17:17

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2024-2-19 02:04


您的第一张图像无法正确显示,我看到完整的SVG代码,但在它之前有一个<b>Warning</b>:  Undefined array key "format" in <b>/home/vol2_6/epizy.com/epiz_31707543/htdocs/asy/index.php</b> on line <b>4</b><br />

这个warning来自哪里? 来自 php 还是来自 Asymptote 服务器

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

kuing 发表于 2024-2-19 02:43
hbghlyj 发表于 2024-2-19 02:04
您的第一张图像无法正确显示,我看到完整的SVG代码,但在它之前有一个

这个warning来自哪里? 来自 php  ...


我不懂……

看 11#、12#,当时应该是发现必须指定 format 才行,否则报错。
而 2# 的第一个图当时是直接用 [img] 然后贴连接的就没有指定 format ,如下:
  1. [img]https://kuing.cjhb.site/asy/?code=import%20graph%3Bdraw(graph(new%20real(real%20x)%7Breturn%20exp(-x%5E2%2F2)%2Fsqrt(2pi)%3B%7D%2C-5%2C5)%2Cheavyred%2B1)%3B%0Aunitsize(0.8cm%2C4cm)%3B%0Adraw((-5.2%2C-0.05)--(5.2%2C-0.05)--(5.2%2C0.45)--(-5.2%2C0.45)--cycle)%3B%0Afor(int%20i%3D0%3Bi%3C6%3Bi%2B%3D2)%7Blabel(%220.%22%2B(string)i%2C(-5.2%2C0.1i)%2Calign%3DW)%3B%7D%0Afor(int%20i%3D-5%3Bi%3C6%3B%2B%2Bi)%7Blabel((string)i%2C(i%2C-0.05)%2Calign%3DS)%3B%7D%0Alabel(%22%24x%24%22%2C(0%2C-0.15)%2Calign%3DS)%3B%0Alabel(%22%24%5Cmu%3D0%2C%5C%3B%5Csigma%5E2%3D1%24%22%2C(3%2C0.3))%3B[/img]
复制代码

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2024-2-19 02:49

也许可以追踪此警告是来自PHP脚本还是Asymptote服务器
在 php 中,只需将 @ 符号附加到函数前面,警告就会被抑制,例如: $contents = @file_get_contents('/path/to/file.html');

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2024-2-19 02:51
我怀疑警告不是来自Asymptote服务器
我怀疑 php 脚本中访问 空参数“format”的行触发警告
所以如果在这一行前面加上@符号,会抑制警告

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2024-2-19 02:55
用同样的方法利用quickchart.io/documentation/graphviz-api/可以使论坛支持GraphViz

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

kuing 发表于 2024-2-19 03:00
hbghlyj 发表于 2024-2-19 02:51
我怀疑警告不是来自Asymptote服务器
我怀疑 php 脚本中访问 空参数“format”的行触发警告
所以如果在这一 ...

asy/index.php 前几行是:
  1. <?php
  2. if(empty($_GET['format'])){$f='svg';}
  3. //if(empty($_GET['format'])){$f='png';}
  4. if($_GET['format']=='svg'||$_GET['format']=='png'||$_GET['format']=='html') {$f=$_GET['format'];}
  5. $url = "http://asymptote.ualberta.ca:10007?f=".$f;
复制代码

我现在将第 4 行改成 elseif,即
  1. <?php
  2. if(empty($_GET['format'])){$f='svg';}
  3. //if(empty($_GET['format'])){$f='png';}
  4. elseif($_GET['format']=='svg'||$_GET['format']=='png'||$_GET['format']=='html') {$f=$_GET['format'];}
  5. $url = "http://asymptote.ualberta.ca:10007?f=".$f;
复制代码

现在 2# 图1 好像可以了?

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2024-2-19 04:07
kuing 发表于 2024-2-18 20:05
??我改了啊

抱歉回复错帖子了,我重新回复一下

kuing 发表于 2023-11-20 07:47
貌似挂了,这帖只有 7# 用 format=png 那图能显示,其他都不行,不知为啥。


php 代码未更改,但行为发生了变化,因此可能是 Infinityfree 正在幕后更改某些内容,并不可避免地影响其所有免费帐户

点评

php 升级过的影响?  发表于 2024-2-19 04:10

手机版|悠闲数学娱乐论坛(第3版)

GMT+8, 2025-3-4 12:01

Powered by Discuz!

× 快速回复 返回顶部 返回列表