神奇!计算出你和另一个人的关系.(…

计算的方法很简单,将你们姓名笔划的总数作比较,以大的数字减小的 ,例如:大雄想知道自己和叮当的关系是什,要将自己名字的笔划(共15划)和叮当名字的笔划(共21划)相减(即21-15),得出的数字是6,「帮你的人」。 十分准确啊!快来试试吧! (算了一下璩美凤(40)和曾仲铭(32)的关系居然是8,真是超准!!)

(差值对照表:

0 亲密无间
1 永远和你在一起
2 水火不相容
3 知心朋友
4 心上人
5 帮你做事的人
6 帮你的人
7 面和心不合
8 男女关系不正常
9 情投意合
10 关系马虎
11 尊敬你的人
12 爱你的人
13 适合你的
14 说你坏话的人
15 克星
16 救星
17 忠心的人
18 狼心狗肺的人
19 单相思
20 山盟海誓
21 情敌
22 服从你的人
23 永远在一起
24 伴终生
25 恨你又爱你

任务描述 本关任务:编写一个能绘制三维曲面的程序。 相关知识 为了完成本关任务,你需要掌握:1.如何三角剖分图形;2.绘制莫比乌斯带。 适用场景:立体图视觉上层次分明色彩鲜艳,具有很强的视觉冲击力,让观看的驻景时间长,留下深刻的印象。 曲面三角剖分 在某些应用的场景中,之前那些些要求均匀采样的网格数据显得太过严格且不太容易实现。这时就可以使用三角剖分图形了。 def f(x, y): return np.sin(np.sqrt(x ** 2 + y ** 2)) theta = 2 * np.pi * np.random.random(1000) r = 6 * np.random.random(1000) x = np.ravel(r * np.sin(theta)) y = np.ravel(r * np.cos(theta)) z = f(x, y) ax = plt.axes(projection='3d') ax.scatter(x, y, z, c=z, cmap='viridis', linewidth=0.5) plt.show() 可以看到图形中还有许多地方需要修补,这些工作可以由ax.plot_trisurf函数完成。它首先找到一组所有点都连接起来的三角形,然后用这些三角形创建曲面。 ax = plt.axes(projection='3d') ax.plot_trisurf(x, y, z,cmap='viridis', edgecolor='none'); 虽然结果没有之前用均匀网格画的图完美,但是这种三角剖分方法很灵活,可以创建各种有趣的三维图。 莫比乌斯带 莫比乌斯带是把一根纸条扭转 180 度后,再把两头粘起来做成的纸带圈。从拓扑学的角度看,莫比乌斯带非常神奇,因为它总共只有一个面! 接下来让我们用matplotlib的三维功能来画一条莫比乌斯带。绘制的关键是想它的绘图参数:由于它是一条二维带,因此需要两个内在维度。让我们把一维度定义为θ,取值范围为0~2 π;一个维度是w,取值范围是-1~1,表示莫比乌斯带的宽度: theta = np.linspace(0, 2 * np.pi, 30) w = np.linspace(-0.25, 0.25, 8) w, theta = np.meshgrid(w, theta) 有了参数之后,我们必须确定带上每个点的直角坐标 ( x, y, z )。 仔细思考一下,我们可能会找到两种旋转关系:一种是圆圈绕着圆心旋转(角度用 θ 定义),一种是莫比乌斯带在自己的坐标轴上旋转(角度用 Φ 定义)。因此,对于一条莫比乌斯带,我们必然会有环的一半扭转 180 度,即 Δ Φ = Δ θ / 2。 phi = 0.5 * theta 现在用我们的三角学知识将极坐标转换成三维直角坐标。定义每个点到中心的距离(半径)r,那么直角坐标 (z,y,z ) 就是: r = 1 + w * np.cos(phi) x = np.ravel(r * np.cos(theta)) y = np.ravel(r * np.sin(theta)) z = np.ravel(w * np.sin(phi)) 最后,要画莫比乌斯带,还必须确保三角剖分是正确的。最好的实现方法就是首先用基本参数化方法定义三角剖分,然后用Matplotlib将这个三角剖分映射到莫比乌斯带的三维空间里,这样就可以画图形: from matplotlib.tri import Triangulation tri = Triangulation(np.ravel(w), np.ravel(theta)) ax = plt.axes(projection='3d') ax.plot_trisurf(x, y, z, triangles=tri.triangles, cmap='viridis', linewidths=0.2); ax.set_xlim(-1, 1); ax.set_ylim(-1, 1); ax.set_zlim(-1, 1); 编程要求 本关的编程任务是补全右侧上部代码编辑区内的相应代码,根据输入数据x、y计算z坐标值,计算方式为np.sin(-x * y)。再绘制曲面图并设置颜色条为jet、线宽为0.2,具体可视化要求如下: 图形的figsize为(10, 10); 文件名为Task2/img/T1.png; 具体要求请参见后续测试样例。 请先仔细阅读右侧上部代码编辑区内给的代码框架,再开始你的编程工作! ####测试说明 平台会对你编写的代码进行测试,对比你输的数值与实际正确的数值,只有所有数据全部计算正确才能进入下一关。 测试输入: 无测试输入 预期输:你的答案与正确答案一致
06-11
### 使用 Matplotlib 绘制三维曲面图莫比乌斯带 绘制三维曲面图莫比乌斯带需要结合参数化方法、三角剖分以及 Matplotlib 的 `plot_trisurf` 函数。以下是详细实现步骤,包括设置颜色条为 `jet`、线宽为 0.2,并将结果保存到指定路径。 #### 参数化莫比乌斯带 莫比乌斯带可以通过以下参数化公式定义[^1]: - \( x = (1 + \frac{v}{2} \cos(\frac{u}{2})) \cos(u) \) - \( y = (1 + \frac{v}{2} \cos(\frac{u}{2})) \sin(u) \) - \( z = \frac{v}{2} \sin(\frac{u}{2}) \) 其中 \( u \in [0, 2\pi] \),\( v \in [-1, 1] \)。 #### 代码实现 以下是完整的 Python 代码实现: ```python import numpy as np import matplotlib.pyplot as plt from matplotlib.tri import Triangulation # 定义莫比乌斯带的参数化 u = np.linspace(0, 2 * np.pi, 100) # 参数 u 范围 v = np.linspace(-1, 1, 50) # 参数 v 范围 u, v = np.meshgrid(u, v) # 创建网格 u = u.ravel() # 展平数组 v = v.ravel() # 计算莫比乌斯带的坐标 x = (1 + v / 2 * np.cos(u / 2)) * np.cos(u) y = (1 + v / 2 * np.cos(u / 2)) * np.sin(u) z = v / 2 * np.sin(u / 2) # 创建三角剖分 tri = Triangulation(np.ravel(u), np.ravel(v)) # 创建三维图形 fig = plt.figure(figsize=(10, 6)) ax = fig.add_subplot(111, projection='3d') # 绘制莫比乌斯带 surf = ax.plot_trisurf(x, y, z, triangles=tri.triangles, cmap='jet', linewidths=0.2) # 添加颜色条 fig.colorbar(surf, ax=ax, shrink=0.5, aspect=10) # 设置坐标轴范围 ax.set_xlim(-1, 1) ax.set_ylim(-1, 1) ax.set_zlim(-1, 1) # 保存图像 plt.savefig("Task2/img/T1.png", dpi=300) plt.show() ``` #### 说明 - 使用 `np.meshgrid` 创建参数 \( u \) \( v \) 的网格。 - 将网格展平以适应三角剖分的需求。 - 使用 `Triangulation` 对莫比乌斯带进行三角剖分[^1]。 - 设置颜色映射为 `jet` 并调整线宽为 0.2。 - 使用 `plt.savefig` 将图像保存到指定路径。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值