python画椭圆形函数算法,python画椭圆形的代码

本文介绍了如何使用Python的turtle库绘制椭圆,通过扩展circle()方法的概念,利用正多边形逼近圆,演示了如何通过改变边数和前进距离实现不同半径和自由度的椭圆绘制。同时,文章强调了这作为Python语法学习的一个实例。
摘要由CSDN通过智能技术生成

大家好,给大家分享一下python画椭圆形函数算法,很多人还不知道这一点。下面详细解释一下。现在让我们来看看!

前两篇文章基本涵盖了turtle的大部分功能,同时也借由对turtle功能的展示,厘清了Python的一些语法特点,以利于新手入门。但是短短几个例子,阐述得还是有限,这里再展开两个知识点,一方面对turtle做个补遗,另一方面把Python语法的大框架过完一遍零基础学python大约需要多久

第一个是画椭圆。上一节中描述了如何用turtle画一个圆,或者是一段弧线,但是在很多图形中需要用到椭圆,如何画出一段优美的椭圆,是本篇的第一个知识点。

上节中有提到turtle中的circle()方法,其核心就是割圆术,也就是用正多边形来模拟一个圆。我们知道,正8边形比正6边形肯定要更接近一个圆,正16边形比正8边形又更接近一个圆,如果我们能画出一个正120边形,或者正360边形的话,那是非常接近一个圆的。下面就沿着这个思路,来画一个正120边形。不用说,在普通个人电脑上,“正120边形”在我们眼里肯定它就是一个“圆”了。上代码:

import turtle as t

t.pendown()

t.setheading(90) # 朝上(正北方向)

for j in range(120): # 重复执行120次

t.forward(3) # 移动3个单位

t.left(3) # 左转3度

t.penup()

t.done()

运行这个例子,可以看到turtle从原点出发,按逆时针方向画了一个圆。如果修改forward()中的参数,可以画出不同半径的圆。

这个画法跟circle()本质上没有区别。但是,却给了我们更大的自由度,来操控这段曲线,例如,修改代码如下:

Pohlig-Hellman算法是离散对数问题的一种解法,可以应用于有限域上的离散对数问题,如椭圆曲线密码学中的离散对数问题。下面是Python实现Pohlig-Hellman算法代码: ```python from math import gcd def egcd(a, b): if a == 0: return (b, 0, 1) else: g, y, x = egcd(b % a, a) return (g, x - (b // a) * y, y) def mod_inv(a, m): g, x, y = egcd(a, m) if g != 1: raise Exception('No modular inverse') else: return x % m def pohlig_hellman(g, h, p, q_factors): x = 0 for prime, exponent in q_factors: m = prime ** exponent t = pow(g, (p-1)//m, p) u = pow(h, (p-1)//m, p) for i in range(exponent): c = pow(t, x, p) d = pow(u * mod_inv(c, p), (p-1)//(prime**(i+1)), p) x += d * prime**i return x % (p-1) ``` 其中,`egcd(a, b)`函数是求解扩展欧几里得算法,`mod_inv(a, m)`函数是求解$a$在模$m$下的逆元,`pohlig_hellman(g, h, p, q_factors)`函数是对输入参数进行Pohlig-Hellman算法的运算。其中,$g$是生成元,$h$是目标元素,$p$是模数,$q\_factors$是一个列表,其中每个元素为形如`(prime, exponent)`的元组,表示$p-1$的分解质因数后的结果。 下面是一个使用Pohlig-Hellman算法的例子: ```python p = 28151 g = 2 h = 19132 q_factors = [(7, 3), (11, 1), (17, 1)] x = pohlig_hellman(g, h, p, q_factors) print(x) # 输出: 13579 ``` 上面的例子中,我们要求解离散对数问题$2^x \equiv 19132 \pmod{28151}$,其中$28151$是一个质数,我们对$p-1=28150$进行分解质因数得到$q\_factors=[(7, 3), (11, 1), (17, 1)]$,然后调用`pohlig_hellman`函数求解即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值