本文记录使用 Go 语言实现 RESTful 的点坐标的转换。

极坐标与笛卡尔坐标的数学关系

假设同一个点使用极坐标表示为 (ρ, θ), 使用笛卡尔坐标表示为(x,y),那么,这些数学符号之间,有如下关系

x = ρ* Cosθ

y = ρ* Sinθ

ρ= Sqrt(x*x+y*y)

θ = Arctan(x/y)

Go语言实现/** @Author: coolwp.com* @Date: 2017-09-12 16:25:34* @Last Modified by: suifengtec* @Last Modified time: 2017-09-12 16:41:35**//*go build -o a.exe  main.go*/package mainimport ("encoding/json""fmt""github.com/gorilla/mux""log""math""net/http""strconv""strings")type DotJ struct {R float64 `json:"r"`A float64 `json:"a"`}type DotD struct {X float64 `json:"x"`Y float64 `json:"y"`}/*type DotJs []DotJtype DotDs []DotD*//*http://127.0.0.1:6688/d/12/5{"r":13,"a":22.61986}*/func doD(w http.ResponseWriter, r *http.Request) {vars := mux.Vars(r)errV := 0x, errX := strconv.ParseFloat(strings.TrimSpace(vars["x"]), 64)y, errY := strconv.ParseFloat(strings.TrimSpace(vars["y"]), 64)if errX != nil {fmt.Println("第1个值x输入错误!")errV = 1} else {if errY != nil {fmt.Println("第2个值Y输入错误!")errV = 2}}if errV == 0 {w.Header().Set("Content-Type", "application/json")r := math.Sqrt(x*x + y*y)a := math.Atan(y / x)a = hudu2jiaodu(a)r = toFixed(r, 5)a = toFixed(a, 5)dotJ := DotJ{R: r, A: a}json.NewEncoder(w).Encode(dotJ)} else {w.WriteHeader(404)fmt.Println("error:404")}}//极坐标转换为笛卡尔坐标/*http://127.0.0.1:6688/j/13/22.61986{"x":12,"y":5}*/func doJ(w http.ResponseWriter, r *http.Request) {vars := mux.Vars(r)errV := 0rr, errR := strconv.ParseFloat(strings.TrimSpace(vars["r"]), 64)aa, errA := strconv.ParseFloat(strings.TrimSpace(vars["a"]), 64)if errR != nil {fmt.Println("第1个值x输入错误!")errV = 1} else {if errA != nil {fmt.Println("第2个值Y输入错误!")errV = 2}}if errV == 0 {w.Header().Set("Content-Type", "application/json")aV := jiaodu2hudu(aa)x := rr * math.Cos(aV)y := rr * math.Sin(aV)x = toFixed(x, 5)y = toFixed(y, 5)dotD := DotD{X: x, Y: y}json.NewEncoder(w).Encode(dotD)} else {w.WriteHeader(404)fmt.Println("error:404")}}func httpHandler() {myRouter := mux.NewRouter().StrictSlash(true)// 笛卡尔坐标转换为极坐标myRouter.HandleFunc("/d/{x}/{y}", doD)// 极坐标转换为笛卡尔坐标myRouter.HandleFunc("/j/{r}/{a}", doJ)log.Fatal(http.ListenAndServe(":6688", myRouter))}/*======================================================*/func jiaodu2hudu(jiaodu float64) float64 {return jiaodu * math.Pi / 180}func hudu2jiaodu(hudu float64) float64 {return hudu * 180 / math.Pi}func round(num float64) int {return int(num + math.Copysign(0.5, num))}func toFixed(num float64, precision int) float64 {output := math.Pow(10, float64(precision))return float64(round(num*output)) / output}func main() {httpHandler()/*fireNow()*/}/*DEV: CLI使用*/func fireNow() {var (ρ,θ,x,y float64)methodType := 1fmt.Print("请选择转换方式:\n输入1,表示需要从极坐标转换为笛卡尔坐标;\n输入2,表示需要从笛卡尔坐标转换为极坐标\n?")fmt.Scan(&methodType)if methodType != 1 && methodType != 2 {fmt.Println("貌似你输入的不是1,也不是2啊,搞哪样?")fireNow()} else {switch methodType {//输入1,表示需要从极坐标转换为笛卡尔坐标;case 1:fmt.Println("请以极坐标格式输入点的坐标(ρ和 θ之间用1个空格隔开,θ默认为弧度单位)?")fmt.Scan(&ρ, &θ)θ = jiaodu2hudu(θ)x = ρ * math.Cos(θ)y = ρ * math.Sin(θ)fmt.Printf("x = %f, y= %f\n", x, y)//输入2,表示需要从笛卡尔坐标转换为极坐标case 2:fmt.Println("请以笛卡尔坐标格式输入点的坐标(x和y之间用1个空格隔开, x不能为0)?")fmt.Scan(&x, &y)ρ = math.Sqrt(x*x + y*y)θ = math.Atan(y / x)θ = hudu2jiaodu(θ)fmt.Printf("ρ= %f, θ= %f\n", ρ, θ)}}}

笛卡尔坐标转极坐标示例 URL

http://127.0.0.1:6688/d/12/5

将会返回{"r":13,"a":22.61986}

极坐标转笛卡尔坐标示例URL

http://127.0.0.1:6688/j/13/22.61986

将会返回{"x":12,"y":5}

两种转换默认精确到小数点后5位。

python笛卡尔转换极坐标_Go 语言: 极坐标与笛卡尔坐标的互转相关推荐

  1. python笛卡尔转换极坐标_[4] opencv: pythonDIS光流法与笛卡尔坐标转为极坐标

    [4] opencv: pythonDIS光流法与笛卡尔坐标转为极坐标 [4] opencv: pythonDIS光流法与笛卡尔坐标转为极坐标 目录1, 笛卡尔转为极坐标 2, DIS光流算法 1, ...

  2. python笛卡尔转换极坐标_[笛卡尔坐标转换极坐标]将1个公式从笛卡尔坐标转换成轴坐标...

    篇一 : 将1个公式从笛卡尔坐标转换成轴坐标 篇二 : 在Matlab图像处理中极坐标与直角坐标矩阵的转换 在用Matlab做图像处理的时候,经常需要使用一些基于极坐标系的公式,比如用Zernike函 ...

  3. python笛卡尔心脏线绘制_python 笛卡尔

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 具体代码如下:def cp_a(a): def _multi(b): retur ...

  4. python 笛卡尔_Python实现求笛卡尔乘积的方法

    本文实例讲述了Python实现求笛卡尔乘积的方法.分享给大家供大家参考,具体如下: 在数学中,两个集合X和Y的笛卡尓乘积(Cartesian product),又称直积,表示为X × Y,第一个对象是 ...

  5. Python笛卡尔内积妙用

    用python的标准模块中的笛卡尔内积来解决一些特殊的数字排列. # 所谓冤家数字,指的就是由仅仅由两个数字组合而成的数字,按照从小到大的顺序进行排列. 例如  2与4组成的冤家数字: [2, 4, ...

  6. 离散数学:笛卡尔乘积(c语言链表实现)

    题目描述: 给定两个集合A和B,输出A和B的笛卡尔乘积. 输入格式: 输入分为两行,第一行输入集合A, 其中包括n个元素(0<=n<=1000),每个元素用","隔开, ...

  7. python笛卡尔_Python 计算笛卡尔积

    Python 计算笛卡尔积 计算多个集合的笛卡尔积,有规律可循,算法和代码也不难,但是很多语言都没有提供直接计算笛卡尔积的方法,需要自己写大段大段的代码计算笛卡尔积,python 提供了一种最简单的计 ...

  8. python笛卡尔_用Python 3来模拟笛卡尔积

    在数学中,两个集合 和 的笛卡尔积,是所有可能的有序对组成的集合,其中有序对的第一个对象是 的成员,第二个对象是 的成员.在集合论中表示为 ,例子如下: . 例如,集合 , ,那么这两个集合的笛卡尔积 ...

  9. python笛卡尔_用python计算笛卡尔坐标

    从高中开始我就没有学过笛卡尔图,我实际上发现了一种与现实生活相关的需求.这可能是一个奇怪的需要,但我必须将数据分配到笛卡尔图上的点,这可以通过调用笛卡尔坐标来访问.图上需要有无穷多个点.例如^ [-2 ...

最新文章

  1. hung-yi lee_p13_反向传播
  2. Java内存模型深度剖析
  3. Web前端经典面试试题(二)
  4. SDK location not found. Define location with sdk.dir in the local.properties file or with an ANDROID
  5. Promise入门详解和基本用法 我来教你
  6. Apollo 5.0,GitHub热榜第四
  7. php 注册回调函数,PHP回调函数
  8. 面试java回答优缺点_阿里Java开发面经分享,面试题(附回答)
  9. return true Java方法_java - 如何检查方法是否返回true或false?_java_酷徒编程知识库...
  10. .NET Core with 微服务 - 什么是微服务
  11. YbtOJ#20073-[NOIP2020模拟赛B组Day6]钻石守卫【构造】
  12. Spring MVC遭遇checkbox的问题解决方案
  13. double write buffer
  14. Elasticsearch 分片和副本策略
  15. 【转】杜月笙识人秘诀!!
  16. Atitit springcloud的艺术 attilax总结 目录 1.1. 服务治理:Spring Cloud Eureka 39 注册中心 1 1.2. 第4章 客户端负载均衡:Spring
  17. matlab如何求开方,matlab中开方怎么表示
  18. 测试显卡矿卡用什么软件,3分钟看懂:AMD二手矿卡简明鉴别、检测教程,从此脱坑不求人...
  19. FOC之PI控制的理解
  20. Python爬取网易云音乐歌手歌曲和歌单!推荐好听的歌吗?

热门文章

  1. RSRP和SINR RSRQ RSSI LTE信号质量
  2. OpenSees 源码编译过程
  3. Linux命令之dmidecode命令
  4. 智能耳机测试软件,讯飞又一精品,讯飞智能耳机全面评测:商务福音
  5. Jsp中htmlEscape=false是什么意思
  6. android华为手机虚拟键,华为手机为何“固执”地保留屏内虚拟按键?答案揭秘!...
  7. 和喜欢的女生聊天 15 分钟以后就找不到话题了怎么办?
  8. 自定义三档半圆开关控件
  9. STC8 单片机低功耗延时方法
  10. 如何查看网卡驱动的型号