用R语言写一个函数: regular_polygon(n, x, y, col, border), 能绘制出正n边形, 且多边形中心默认在原点, 通过col和border可以设置正多边形内部和边框的颜色
时间: 2023-06-23 18:09:40 浏览: 115
以下是使用R语言编写的函数 `regular_polygon()`:
```r
regular_polygon <- function(n, x=0, y=0, col="black", border="white") {
angles <- seq(0, 2*pi, length.out = n+1)[-1]
vertices <- cbind(x + cos(angles), y + sin(angles))
polygon(vertices, col=col, border=border)
}
```
这个函数接受五个参数:
- `n`: 正多边形的边数
- `x`: 多边形中心的x坐标,默认为0
- `y`: 多边形中心的y坐标,默认为0
- `col`: 多边形内部的颜色,默认为黑色
- `border`: 多边形边框的颜色,默认为白色
该函数首先计算出正n边形各个顶点的坐标,然后使用 `polygon()` 函数绘制出多边形。`polygon()` 函数会自动将第一个顶点和最后一个顶点相连,因此在计算顶点坐标时,需要在正n边形的角度序列中去掉第一个元素。
例如,要绘制一个红色的边框、蓝色的内部的正五边形,可以这样调用 `regular_polygon()` 函数:
```r
regular_polygon(n=5, col="blue", border="red")
```
相关问题
用R语言写一个函数: f_area(f, interval), 能绘制出一个连续函数下方的面积图像, 参数interval代表了自变量的取值区间
以下是用R语言实现的函数f_area(f, interval),用于绘制一个连续函数下方的面积图像:
```r
f_area <- function(f, interval) {
x <- seq(interval[1], interval[2], length.out = 1000) # 生成自变量取值序列
y <- f(x) # 根据自变量取值序列计算因变量取值序列
plot(x, y, type = "l", xlab = "x", ylab = "y") # 绘制连续函数的图像
polygon(c(x, rev(x)), c(y, rep(0, length(y))), col = "gray90") # 绘制下方面积的多边形
}
```
其中,参数f表示连续函数,可以是一个R语言函数或表达式;参数interval是一个包含两个元素的向量,分别表示自变量的取值区间的起点和终点。
函数首先在自变量取值区间内生成一组等距的自变量取值序列x,然后计算出对应的因变量取值序列y,并用plot函数绘制连续函数的图像。最后,函数使用polygon函数绘制下方面积的多边形,并给多边形填充灰色。
解释这个函数bool PolygonDecomposition::convertRos2CvPolygon(const std::vector<RjpPoint> &in_polygon) { if (in_polygon.size() < 3) { return false; } auto ymin_iter = std::min_element(in_polygon.begin(), in_polygon.end(), [](RjpPoint p1, RjpPoint p2) { return p1.y < p2.y; }); int y_min_idx = std::distance(in_polygon.begin(), ymin_iter); double cross_product; if (y_min_idx == 0) { cross_product = calCrossProduct(in_polygon[in_polygon.size() - 1], in_polygon[y_min_idx], in_polygon[y_min_idx + 1]); } else if (y_min_idx = in_polygon.size() - 1) { cross_product = calCrossProduct(in_polygon[y_min_idx - 1], in_polygon[y_min_idx], in_polygon[0]); } else { cross_product = calCrossProduct(in_polygon[y_min_idx - 1], in_polygon[y_min_idx], in_polygon[y_min_idx + 1]); } if (cross_product > 0) { for (int i = 0; i < in_polygon.size(); ++i) { _polygon_cv.push_back(cv::Point2f(in_polygon[i].x, in_polygon[i].y)); } } else { _polygon_cv.push_back(cv::Point2f(in_polygon[0].x, in_polygon[0].y)); for (int i = in_polygon.size() - 1; i > 0; --i) { _polygon_cv.push_back(cv::Point2f(in_polygon[i].x, in_polygon[i].y)); } } std::vector<int> tmp_poly; for (int i = 0; i < _polygon_cv.size(); ++i) { tmp_poly.push_back(i); } _result_polygon_idx.push_back(tmp_poly); return true; }
这是一个将输入的 Ros 数据库中的多边形转换成 OpenCV 库中的多边形的函数。首先,它检查输入的多边形是否至少包含三个点,因为只有三个或更多个点才能构成一个多边形。然后,它使用 STL 中的 std::min_element() 函数找到多边形中 y 值最小的点,然后计算这个点与相邻两个点的向量叉积,以确定多边形的方向。如果叉积结果为正,表示多边形是逆时针方向的,将多边形的点按输入顺序添加到 OpenCV 多边形中。如果叉积结果为负,则多边形是顺时针方向的,需要将多边形的点按相反的顺序添加到 OpenCV 多边形中。最后,将多边形的索引添加到结果中,并返回 true 表示转换成功。
阅读全文
相关推荐
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.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)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)