代码绘制的地暖线缆C形曲线旋转了90度,求解决方法
代码绘制的地暖线缆C形曲线旋转了90度,求解决方法
嘿,作为初学者能自己写出这样的代码已经很棒啦!我一眼就看出问题所在——你现在生成的C形曲线方向搞反了,咱们调整几行代码就能搞定。
从你的代码来看,问题出在C形曲线的x、y坐标计算逻辑上:你用np.cos(theta)控制x轴的变化、np.sin(theta)控制y轴的变化,这会生成水平方向左右摆动的C形,而地暖线缆需要的是垂直方向衔接上下直段的转弯(也就是你说的旋转90度后的效果)。
直接给你改好的代码,再给你解释为什么这么改:
# Add C-shaped curves at the end of each section for i in range(int(width // spacing)): theta = np.linspace(0, np.pi, 100) # 核心修改:交换三角函数的使用,同时修正曲线的圆心y坐标 x_curve = length - (spacing / 2) * np.sin(theta) y_curve = (i + 0.5) * spacing + (spacing / 2) * np.cos(theta) color = 'blue' if total_length < 5 else 'red' ax.plot(x_curve, y_curve, color=color) total_length += np.pi * (spacing / 2)
我给你拆解下修改点:
- 用
np.sin(theta)控制x轴变化:在θ从0到π的过程中,sin值从0升到1再降到0,x会从直段的末端length向左移动到length - spacing/2,再回到length,刚好形成衔接直段的水平偏移 - 用
np.cos(theta)控制y轴变化:cos值从1降到-1,配合(i + 0.5)*spacing的圆心y坐标,y会精准从i*spacing(上一段直线缆的高度)过渡到(i+1)*spacing(下一段直线缆的高度) - 修正圆心y坐标为
(i + 0.5)*spacing:这样曲线的中点刚好卡在两段直线缆的中间高度,转弯会和直段完美衔接,不会出现错位
另外提醒你一句:如果你的直线缆段是沿y轴等间距排列的(比如x从0到length,y=i*spacing),那修改后的曲线起点(length, i*spacing)刚好能和直段的末端完全接上,整个线缆布局就连贯了。
备注:内容来源于stack exchange,提问作者GodAnAlien




