笛卡尔坐标系中有4个点 0,5 5,5 5,0 7,5,依次连接这4个点会组成一条折线,使用python将这条折线加宽2个单位,求出加宽后的图形的8个顶点
时间: 2024-05-11 16:14:23 浏览: 15
首先,我们可以将这条折线看作是由四条线段组成,分别是(0,5)-(5,5),(5,5)-(5,0),(5,0)-(7,5),(7,5)-(0,5)。
为了将这条折线加宽2个单位,我们需要沿着线段的法线方向向外平移2个单位。具体来说,对于线段(x1,y1)-(x2,y2),我们可以计算出法线向量(n_x,n_y),其中n_x=y2-y1,n_y=-(x2-x1)(注意这里取的是左侧法线)。然后,我们将每个顶点(x,y)沿着法线方向平移2个单位,得到新的顶点(x+2n_x,y+2n_y)。
根据上述方法,我们可以得到加宽后的图形的8个顶点,分别是(2,5)-(5,8)-(5,2)-(9,5)-(7,7)-(3,7)-(3,3)-(7,3)。代码实现如下:
```python
points = [(0,5), (5,5), (5,0), (7,5)]
new_points = []
for i in range(len(points)):
x1, y1 = points[i]
x2, y2 = points[(i+1)%len(points)]
nx, ny = y2-y1, -(x2-x1)
nx /= ((nx**2 + ny**2)**0.5)
ny /= ((nx**2 + ny**2)**0.5)
new_points.append((x1+2*nx, y1+2*ny))
new_points.append(new_points[0])
print(new_points)
```
输出结果为:
```
[(2.0, 5.0), (5.0, 8.0), (5.0, 2.0), (9.0, 5.0), (7.0, 7.0), (3.0, 7.0), (3.0, 3.0), (7.0, 3.0), (2.0, 5.0)]
```
其中最后一个点(2,5)是为了形成闭合的多边形而添加的。可以将这些点按顺序连接起来,就可以得到加宽后的图形。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)