如何修改cart2polar函数实现自定义原点的笛卡尔坐标转极坐标?
修改cart2polar函数以指定自定义原点
首先得修正原函数里的两个明显错误:
- 原函数把极径
r和极角theta的赋值搞反了——sqrt(x²+y²)算的是极径,应该对应r;极角theta要靠atan2(y, x)计算,而且注意atan2的参数顺序是y在前、x在后,原函数写反了会导致角度结果完全不对。
接下来是实现自定义原点的需求,具体修改步骤如下:
- 给函数新增两个参数
origin_x和origin_y,并设置默认值为你指定的81.05和0.23,这样函数默认就会用这个点当原点。 - 计算输入坐标
(x,y)相对于自定义原点的偏移量:dx = x - origin_x,dy = y - origin_y。 - 用偏移量
dx和dy来计算极坐标,而不是直接用输入的x和y。
修改后的完整代码:
# 先定义自定义原点的默认值,方便后续修改 default_origin_x <- 81.05 default_origin_y <- 0.23 cart2polar <- function(x, y, origin_x = default_origin_x, origin_y = default_origin_y) { # 计算相对于自定义原点的坐标偏移 dx <- x - origin_x dy <- y - origin_y # 计算极径和极角(theta是弧度制,如需转角度可以用degrees(theta)) r <- sqrt(dx^2 + dy^2) theta <- atan2(dy, dx) # 返回整理好的结果 data.frame(r = r, theta = theta) }
用法示例
- 默认用指定原点计算:比如调用
cart2polar(81.05, 0.23),返回的r为0,theta为0,符合预期。 - 临时切换原点:如果需要用其他点当原点,直接传参数即可,比如
cart2polar(0, 0, origin_x = 0, origin_y = 0),就回到以(0,0)为原点的计算逻辑。
内容的提问来源于stack exchange,提问作者user22178063
相关产品推荐
相关产品推荐

