我使用javascript和画布绘制数学设计的刻度(用于测量扭矩,它包括牛顿米和英尺 - 磅).我一直在使用三角函数定位我的刻度线arc,并自然地使用绘制弧形线.问题出现在他们需要排队的时候,但是有一些奇怪的失真.然后我绘制了一个非常大的圆圈并将其与GIMP中的圆形选择进行比较,并且存在失真.圆圈周围每45度一致,但在这些节点之间,画布绘制的圆圈向外偏离,就像八角形可以向外圆形太远以近似圆形.
为什么会出现这些扭曲?如何在画布上绘制一个真正的圆形圆圈?
这是我用来生成扭曲圆圈的代码.
<!DOCTYPE html>
<html>
<body>
<canvas width=8000 height=8000 id='myCanvas'></canvas>
<script>
var canvas = document.getElementById('myCanvas');
var context = canvas.getContext('2d');
context.beginPath();
context.arc(4000, 4000, 3200, 0, Math.PI*2, false);
context.lineWidth = 1;
context.strokeStyle = '#ff0000';
context.lineCap = 'square';
context.stroke();
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
这可能不是最小的,我不知道context.lineCap它的相关性,但它是基于此代码的遗迹.以下屏幕截图显示了GIMP绘制的圆与Chrome绘制的圆之间的区别

我正在尝试设置我的计算机,以便我可以使用连接到python脚本的外部设备对自己进行身份验证.我开始通过更换login程序inittab用我自己的计划,我已经能够进入一个bash shell的.问题是,它没有获得像(我推测)那样的新环境login.我知道有办法让我弄乱环境,但我还没有找到一种方法来给它一个"默认"配置,即使这样的事情是有道理的.
我最近一直在玩LISP,我想通过缓存它的输出来尝试优化一个非常低效的递归函数,所以它只运行一次参数的每个组合.我想将结果保存到哈希表中,使用(LIST a b)或(CONS a b)作为键.我的问题是,这甚至可能吗?我读过的文档会让我相信它,因为我读到的文档定义key为"对象",并将"对象"定义为构造的东西cons.所以我试了一下.
(defparameter *table* (make-hash-table))
(setf (gethash (list 1 2) *table*) 123)
(format t "~S~%" (gethash (list 1 2) *table*))
Run Code Online (Sandbox Code Playgroud)
它给了我NIL,当我期待123.如果我更换(list 1 2)了cons它仍然无法正常工作,但是当我使用一个普通的整数,它工作正常.
我正在使用GCL 2.6.12
我正在编写一个程序来读取stdin,然后写下它读取的内容stdout,取消它找到的任何转义的十六进制数字.我想读的所有数字都是8位.这就是我到目前为止所拥有的
while((c = fgetc(stdin)) != EOF) {
if(c == '%') {
fscanf(stdin,"%x",&r);
printf("%i \n",r);
}
}
Run Code Online (Sandbox Code Playgroud)
这样可以正常工作,除了当我写一些类似于%FFF标准输入的内容时,它将其读取为3位十六进制数.我该如何限制fscanf只读2个字符?我曾考虑将接下来的2个字符读入缓冲区sscanf'ing,但这对我来说感觉相当不优雅.