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()
