Python 解一道江苏 <小升初; 数学题,如此变态,看不起来谁?
Posted AI科技大本营
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 解一道江苏 <小升初; 数学题,如此变态,看不起来谁?相关的知识,希望对你有一定的参考价值。
作者:小小明【江湖人称"明佬"】
链接:blog.csdn.net/as604049322/article/details/118388505
注明:本文经过作者小小明授权发布,可戳原文链接关注原文作者!
本文简介
大家好,我是黄同学????
前段时间,我在群里面发布了一道题。没想到明佬
用心了,很快记下了,马上就用Python解答出来了。
题目如下:
小学题目都这么难,看不起谁呢。今天明佬将尝试通过Python来解题。
首先我们以左下角为原点建立直角坐标系,很快能够知道圆的方程为
两个扇形的方程分别为 和 的一部分。
上面的方程很容易得到,但要计算出方程表达式还需费一番功夫,所以下面我们打算也让Python来计算。
在解题前,我们会先用Python绘制出如下图像。
结果如下:
绘图步骤
1. 画圆
首先计算出上半圆和下半的表达式分别为:
from sympy.abc import x, y
import sympy
c1, c2 = sympy.solve((x-5)**2+(y-5)**2 - 5**2, y)
display(c1)
display(c2)
结果如下:
如果想要展开表达式可以进行如下操作:
display(sympy.expand(c1))
display(sympy.expand(c2))
结果如下:
直接打印可以看到在Python的表达式:
print(str(c1))
print(str(c2))
5 - sqrt(-x*(x - 10))
sqrt(x*(10 - x)) + 5
因此利用上述文本,我们可以直接进行numpy的函数求值,下面尝试画个圆试一下:
import numpy as np
from numpy import sqrt
import matplotlib.pyplot as plt
%matplotlib inline
plt.figure(figsize=(5, 5))
x = np.linspace(0, 10, 1024)
plt.plot(x, eval(str(c1)), color="r")
plt.plot(x, eval(str(c2)), color="r")
plt.xlim(-0.2, 10.2)
plt.ylim(-0.2, 10.2)
plt.show()
结果如下:
可以看到我们求解的两个表达式可以画出圆形。
下面我们继续来画扇形。
2. 画扇形
两个扇形的方程分别为 和 的一部分。
首先我们计算上面的扇形的函数公式:
sympy.solve((x-10)**2+y**2 - 10**2, y)
结果如下:
[sqrt(x*(20 - x)), -sqrt(-x*(x - 20))]
显然上面的扇形的函数公式是正数,可以直接取角标为0的函数公式:
s1, _ = sympy.solve((x-10)**2+y**2 - 10**2, y)
s1
结果如下:
用同样的方法我们再求出下面的扇形:
s2, _ = sympy.solve(x**2+(y-10)**2 - 10**2, y)
s2
结果如下:
然后我们绘制函数图形验证一下:
import numpy as np
from numpy import sqrt
import matplotlib.pyplot as plt
from sympy.abc import x, y
import sympy
%matplotlib inline
c1, c2 = sympy.solve((x-5)**2+(y-5)**2 - 5**2, y)
s1, _ = sympy.solve((x-10)**2+y**2 - 10**2, y)
s2, _ = sympy.solve(x**2+(y-10)**2 - 10**2, y)
x = np.linspace(0, 10, 1024)
plt.figure(figsize=(5, 5))
plt.plot(x, eval(str(c1)), color="r")
plt.plot(x, eval(str(c2)), color="r")
plt.plot(x, eval(str(s1)), color="b")
plt.plot(x, eval(str(s2)), color="b")
plt.xlim(-0.2, 10.2)
plt.ylim(-0.2, 10.2)
plt.show()
结果如下:
3. 绘制阴影
首先我们需要求出四个交点。
先分清几个线各是哪条:
import numpy as np
from numpy import sqrt
import matplotlib.pyplot as plt
from sympy.abc import x, y
import sympy
%matplotlib inline
c1, c2 = sympy.solve((x-5)**2+(y-5)**2 - 5**2, y)
s1, _ = sympy.solve((x-10)**2+y**2 - 10**2, y)
s2, _ = sympy.solve(x**2+(y-10)**2 - 10**2, y)
x = np.linspace(0, 10, 1024)
plt.figure(figsize=(5, 5))
plt.plot(x, eval(str(c1)), label="c1")
plt.plot(x, eval(str(c2)), label="c2")
plt.plot(x, eval(str(s1)), label="s1")
plt.plot(x, eval(str(s2)), label="s2")
plt.xlim(-0.2, 10.2)
plt.ylim(-0.2, 10.2)
plt.legend()
plt.show()
结果如下:
下面分别交出交点:
from sympy.abc import x, y
x1, = sympy.solve(c1-s1, x)
x2, = sympy.solve(c1-s2, x)
x3, = sympy.solve(c2-s1, x)
x4, = sympy.solve(c2-s2, x)
x1, x2, x3, x4
(15/4 - 5*sqrt(7)/4,
25/4 - 5*sqrt(7)/4,
5*sqrt(7)/4 + 15/4,
5*sqrt(7)/4 + 25/4)
根据对称性,我们可以知道四个交点的坐标分别为(x1,x2), (x2,x1), (x3,x4),(x4,x3)
同样可以画图验证一下:
0077-小升初2:废品回收4年级|C++免费试听完美对标信奥核心考点,决胜小升初/中高考!