import numpy as np
import matplotlib.pyplot as plt
# 参数
k
= 5 * np.
sqrt(3) / 3 # 由体积相等算出的 k
x = np.linspace(0, sqrt3, 400)
y_parabola = x**2
y_line = k * x
y_top = 3 * np.ones_like(x)
# 交点横坐标
x_inter = 3 / k # 直线与 y=3 的交点,此时约等于 1.039
x_intersect_parabola = sqrt3 # 抛物线顶点与 y=3 交点
plt.figure(figsize=(6, 5))
# 填充区域 D (整体)
plt.fill_between(x, y_parabola, y_top, where=(x <= sqrt3), color='lightgray', alpha=0.5, label='$D$ (整体)')
# 再分别用不同透明度区分 D1 和 D2
# D2: 在 0 ≤ x ≤ x_inter 上,从直线到 y=3
x2 = x[x <= x_inter]
y2_lower = k * x2
plt.fill_between(x2, y2_lower, 3, color='skyblue', alpha=0.7, label='$D_2$ (绕 x 轴旋转)')
# D1: 分两段:0~x_inter 上从抛物线到直线;x_inter~sqrt3 上从抛物线到 y=3
x1a = x[x <= x_inter]
y1a_lower = x1a**2
y1a_upper = k * x1a
x1b = x[(x >= x_inter) & (x <= sqrt3)]
y1b_lower = x1b**2
plt.fill_between(x1a, y1a_lower, y1a_upper, color='lightcoral', alpha=0.7, label='$D_1$ (绕 x 轴旋转)')
plt.fill_between(x1b, y1b_lower, 3, color='lightcoral', alpha=0.7)
# 绘制曲线
plt.plot(x, y_parabola, 'b-', linewidth=2, label='$y = x^2$')
plt.plot(x, y_line, 'r--', linewidth=2, label=f'$y = kx,\ k = {k:.3f}$')
plt.axhline(y=3, color='green', linestyle='--', linewidth=2, label='$y = 3$')
plt.axvline(x=0, color='black', linewidth=0.5)
# 标注交点
plt.plot([x_inter, x_inter], [0, 3], 'k:', linewidth=0.8)
plt.plot(x_inter, 3, 'ko', markersize=5)
plt.plot(sqrt3, 3, 'ko', markersize=5)
plt.plot(0, 0, 'ko', markersize=3)
plt.xlim(0, sqrt3 + 0.2)
plt.ylim(0, 3.2)
plt.xlabel('$x$')
plt.ylabel('$y$')
plt.title('区域 $D$ 被直线 $y=kx$ 分成 $D_1$ 和 $D_2$')
plt.legend(loc='upper left')
plt.grid(alpha=0.3)
plt.gca().set_aspect('equal', adjustable='box')
plt.show()
aW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKCiMg5Y+C5pWwCmsgPSA1ICogbnAuc3FydCgzKSAvIDMgICAjIOeUseS9k+enr+ebuOetieeul+WHuueahCBrCnNxcnQzID0gbnAuc3FydCgzKQoKeCA9IG5wLmxpbnNwYWNlKDAsIHNxcnQzLCA0MDApCnlfcGFyYWJvbGEgPSB4KioyCnlfbGluZSA9IGsgKiB4CnlfdG9wID0gMyAqIG5wLm9uZXNfbGlrZSh4KQoKIyDkuqTngrnmqKrlnZDmoIcKeF9pbnRlciA9IDMgLyBrICAgIyDnm7Tnur/kuI4geT0zIOeahOS6pOeCue+8jOatpOaXtue6puetieS6jiAxLjAzOQp4X2ludGVyc2VjdF9wYXJhYm9sYSA9IHNxcnQzICAgIyDmipvniannur/pobbngrnkuI4geT0zIOS6pOeCuQoKcGx0LmZpZ3VyZShmaWdzaXplPSg2LCA1KSkKCiMg5aGr5YWF5Yy65Z+fIEQgKOaVtOS9kykKcGx0LmZpbGxfYmV0d2Vlbih4LCB5X3BhcmFib2xhLCB5X3RvcCwgd2hlcmU9KHggPD0gc3FydDMpLCBjb2xvcj0nbGlnaHRncmF5JywgYWxwaGE9MC41LCBsYWJlbD0nJEQkICjmlbTkvZMpJykKCiMg5YaN5YiG5Yir55So5LiN5ZCM6YCP5piO5bqm5Yy65YiGIEQxIOWSjCBEMgojIEQyOiDlnKggMCDiiaQgeCDiiaQgeF9pbnRlciDkuIrvvIzku47nm7Tnur/liLAgeT0zCngyID0geFt4IDw9IHhfaW50ZXJdCnkyX2xvd2VyID0gayAqIHgyCnBsdC5maWxsX2JldHdlZW4oeDIsIHkyX2xvd2VyLCAzLCBjb2xvcj0nc2t5Ymx1ZScsIGFscGhhPTAuNywgbGFiZWw9JyREXzIkICjnu5UgeCDovbTml4vovawpJykKIyBEMTog5YiG5Lik5q6177yaMH54X2ludGVyIOS4iuS7juaKm+eJqee6v+WIsOebtOe6v++8m3hfaW50ZXJ+c3FydDMg5LiK5LuO5oqb54mp57q/5YiwIHk9Mwp4MWEgPSB4W3ggPD0geF9pbnRlcl0KeTFhX2xvd2VyID0geDFhKioyCnkxYV91cHBlciA9IGsgKiB4MWEKeDFiID0geFsoeCA+PSB4X2ludGVyKSAmICh4IDw9IHNxcnQzKV0KeTFiX2xvd2VyID0geDFiKioyCnBsdC5maWxsX2JldHdlZW4oeDFhLCB5MWFfbG93ZXIsIHkxYV91cHBlciwgY29sb3I9J2xpZ2h0Y29yYWwnLCBhbHBoYT0wLjcsIGxhYmVsPSckRF8xJCAo57uVIHgg6L205peL6L2sKScpCnBsdC5maWxsX2JldHdlZW4oeDFiLCB5MWJfbG93ZXIsIDMsIGNvbG9yPSdsaWdodGNvcmFsJywgYWxwaGE9MC43KQoKIyDnu5jliLbmm7Lnur8KcGx0LnBsb3QoeCwgeV9wYXJhYm9sYSwgJ2ItJywgbGluZXdpZHRoPTIsIGxhYmVsPSckeSA9IHheMiQnKQpwbHQucGxvdCh4LCB5X2xpbmUsICdyLS0nLCBsaW5ld2lkdGg9MiwgbGFiZWw9ZickeSA9IGt4LFwgayA9IHtrOi4zZn0kJykKcGx0LmF4aGxpbmUoeT0zLCBjb2xvcj0nZ3JlZW4nLCBsaW5lc3R5bGU9Jy0tJywgbGluZXdpZHRoPTIsIGxhYmVsPSckeSA9IDMkJykKcGx0LmF4dmxpbmUoeD0wLCBjb2xvcj0nYmxhY2snLCBsaW5ld2lkdGg9MC41KQoKIyDmoIfms6jkuqTngrkKcGx0LnBsb3QoW3hfaW50ZXIsIHhfaW50ZXJdLCBbMCwgM10sICdrOicsIGxpbmV3aWR0aD0wLjgpCnBsdC5wbG90KHhfaW50ZXIsIDMsICdrbycsIG1hcmtlcnNpemU9NSkKcGx0LnBsb3Qoc3FydDMsIDMsICdrbycsIG1hcmtlcnNpemU9NSkKcGx0LnBsb3QoMCwgMCwgJ2tvJywgbWFya2Vyc2l6ZT0zKQoKcGx0LnhsaW0oMCwgc3FydDMgKyAwLjIpCnBsdC55bGltKDAsIDMuMikKcGx0LnhsYWJlbCgnJHgkJykKcGx0LnlsYWJlbCgnJHkkJykKcGx0LnRpdGxlKCfljLrln58gJEQkIOiiq+ebtOe6vyAkeT1reCQg5YiG5oiQICREXzEkIOWSjCAkRF8yJCcpCnBsdC5sZWdlbmQobG9jPSd1cHBlciBsZWZ0JykKcGx0LmdyaWQoYWxwaGE9MC4zKQpwbHQuZ2NhKCkuc2V0X2FzcGVjdCgnZXF1YWwnLCBhZGp1c3RhYmxlPSdib3gnKQpwbHQuc2hvdygp