43 lines
1.2 KiB
Python
43 lines
1.2 KiB
Python
import matplotlib.pyplot as plt
|
|
import numpy as np
|
|
|
|
# 定义 x 的范围
|
|
x = np.linspace(0, 3, 500)
|
|
|
|
# 初始化 y 为 0
|
|
y = np.zeros_like(x)
|
|
|
|
# 定义Ω形状的关键参数
|
|
r = 0.6 # 半圆半径
|
|
xc = 1.5 # 圆心 x 坐标
|
|
yc = 0.6 # 圆心 y 坐标(上移半圆)
|
|
|
|
# 定义中间部分的范围(圆弧范围)
|
|
circle_mask = (x >= xc - r) & (x <= xc + r)
|
|
x_circle = x[circle_mask]
|
|
|
|
# 计算圆弧顶部的 y 值
|
|
y[circle_mask] = yc + np.sqrt(r**2 - (x_circle - xc)**2)
|
|
|
|
# 定义两侧曲线的范围
|
|
left_curve_mask = (x >= 1) & (x < xc - r)
|
|
right_curve_mask = (x > xc + r) & (x <= 2)
|
|
|
|
# 左侧曲线(底部向右偏移)
|
|
x_left = x[left_curve_mask]
|
|
x_shift = 0.2 # 底部向右偏移的幅度
|
|
y[left_curve_mask] = (yc - r) * (1 - ((x_left - (1 + x_shift * (1 - (x_left - 1) / (xc - r - 1)))) / (xc - r - (1 + x_shift)))**2)
|
|
|
|
# 右侧曲线(保持不变)
|
|
x_right = x[right_curve_mask]
|
|
y[right_curve_mask] = (yc - r) * (1 - ((x_right - 2) / (xc + r - 2))**2)
|
|
|
|
# 绘制图形
|
|
plt.plot(x, y, linewidth=2)
|
|
plt.axhline(0, color='gray', linewidth=0.5, linestyle='--')
|
|
plt.title('左侧底部向右偏移的Ω形状')
|
|
plt.xlabel('X 轴')
|
|
plt.ylabel('Y 轴')
|
|
plt.axis('equal') # 确保 x 和 y 轴的比例相同
|
|
plt.show()
|