python获取中文字体点阵坐标_在squ中高效在线获取点阵点

该博客介绍如何使用Python找到线段AB垂直平分线上的晶格点,涉及线性丢番图方程和欧几里得算法,特别讨论了在中文字体点阵坐标计算中的应用。
摘要由CSDN通过智能技术生成

根据matovitch最新的代码草案(我只浏览了一眼),我可能会想得太多了,但无论如何。。。在

设A=(A.x,A.y),B=(B.x,B.y),其中(A.x,A.y,B.x,B.y)是整数。

然后直线p,AB的垂直平分线穿过

M=(M.x,M.y)=((A.x+B.x)/2,(A.y+B.y)/2)

AB和p的斜率乘积为-1,因此p的斜率为

-(B.x-A.x)/(B.y-A.y)

因此,在点斜率形式下,p的方程是

(y-M.y)/(x-M.x)=(A.x-B.x)/(B.y-A.y)

重新排列,

y*(B.y-A.y)+x*(B.x-A.x)=M.y*(B.y-A.y)+M.x*(B.x-A.x)

=((B.y+A.y)*(B.y-A.y)+(B.x+A.x)*(B.x-A.x))/2

=(B.y^2-A.y^2+B.x ^2-A.x^2)/2

显然,对于任何晶格点(x,y),y*(B.y-A.y)+x*(B.x-A.x)必须是整数。所以只有当(B.y^2-A.y^2+B.x^2-A.x^2)是偶数时,直线p才会通过晶格点。在

现在(B.y^2-A.y^2+B.x^2-A.x^2)是偶数的&仅当(A.x+B.x+A.y+B.y)是偶数,如果偶数(A.x,A.y,B.x,B.y)是奇数。在下面,我假设(A.x+B.x+A.y+B.y)是偶数。在

dx=(B.x-A.x)

dy=(B.y-A.y)

s=(B.y^2-A.y^2+B.x^2-A.x^2)/2

所以p的方程是

y*dy+x*dx=s

因为y,dy,x,dx&s都是整数,所以这个方程是一个线性丢番图方程,而求这类方程解的标准方法是使用extended Euclidean algorithm。我们的方程只有在dx&dy的最大公约数除以s时才有解。幸运的是,在这种情况下是正确的,但我不在这里给出证明。在

设Y,X是Y*dy+X*dx=g的解,其中g是gcd(dx,dy),即

Y*dy+X*dx=g

Y*dy/g+X*dx/g=1

设dy'=dy/g,dx'=dx/g,s'=s/g,所以

Y*dy'+X*dx

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值