python笛卡尔转换极坐标_Go 语言: 极坐标与笛卡尔坐标的互转
本文记录使用 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 语言: 极坐标与笛卡尔坐标的互转相关推荐
- python笛卡尔转换极坐标_[4] opencv: pythonDIS光流法与笛卡尔坐标转为极坐标
[4] opencv: pythonDIS光流法与笛卡尔坐标转为极坐标 [4] opencv: pythonDIS光流法与笛卡尔坐标转为极坐标 目录1, 笛卡尔转为极坐标 2, DIS光流算法 1, ...
- python笛卡尔转换极坐标_[笛卡尔坐标转换极坐标]将1个公式从笛卡尔坐标转换成轴坐标...
篇一 : 将1个公式从笛卡尔坐标转换成轴坐标 篇二 : 在Matlab图像处理中极坐标与直角坐标矩阵的转换 在用Matlab做图像处理的时候,经常需要使用一些基于极坐标系的公式,比如用Zernike函 ...
- python笛卡尔心脏线绘制_python 笛卡尔
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 具体代码如下:def cp_a(a): def _multi(b): retur ...
- python 笛卡尔_Python实现求笛卡尔乘积的方法
本文实例讲述了Python实现求笛卡尔乘积的方法.分享给大家供大家参考,具体如下: 在数学中,两个集合X和Y的笛卡尓乘积(Cartesian product),又称直积,表示为X × Y,第一个对象是 ...
- Python笛卡尔内积妙用
用python的标准模块中的笛卡尔内积来解决一些特殊的数字排列. # 所谓冤家数字,指的就是由仅仅由两个数字组合而成的数字,按照从小到大的顺序进行排列. 例如 2与4组成的冤家数字: [2, 4, ...
- 离散数学:笛卡尔乘积(c语言链表实现)
题目描述: 给定两个集合A和B,输出A和B的笛卡尔乘积. 输入格式: 输入分为两行,第一行输入集合A, 其中包括n个元素(0<=n<=1000),每个元素用","隔开, ...
- python笛卡尔_Python 计算笛卡尔积
Python 计算笛卡尔积 计算多个集合的笛卡尔积,有规律可循,算法和代码也不难,但是很多语言都没有提供直接计算笛卡尔积的方法,需要自己写大段大段的代码计算笛卡尔积,python 提供了一种最简单的计 ...
- python笛卡尔_用Python 3来模拟笛卡尔积
在数学中,两个集合 和 的笛卡尔积,是所有可能的有序对组成的集合,其中有序对的第一个对象是 的成员,第二个对象是 的成员.在集合论中表示为 ,例子如下: . 例如,集合 , ,那么这两个集合的笛卡尔积 ...
- python笛卡尔_用python计算笛卡尔坐标
从高中开始我就没有学过笛卡尔图,我实际上发现了一种与现实生活相关的需求.这可能是一个奇怪的需要,但我必须将数据分配到笛卡尔图上的点,这可以通过调用笛卡尔坐标来访问.图上需要有无穷多个点.例如^ [-2 ...
最新文章
- hung-yi lee_p13_反向传播
- Java内存模型深度剖析
- Web前端经典面试试题(二)
- SDK location not found. Define location with sdk.dir in the local.properties file or with an ANDROID
- Promise入门详解和基本用法 我来教你
- Apollo 5.0,GitHub热榜第四
- php 注册回调函数,PHP回调函数
- 面试java回答优缺点_阿里Java开发面经分享,面试题(附回答)
- return true Java方法_java - 如何检查方法是否返回true或false?_java_酷徒编程知识库...
- .NET Core with 微服务 - 什么是微服务
- YbtOJ#20073-[NOIP2020模拟赛B组Day6]钻石守卫【构造】
- Spring MVC遭遇checkbox的问题解决方案
- double write buffer
- Elasticsearch 分片和副本策略
- 【转】杜月笙识人秘诀!!
- Atitit springcloud的艺术 attilax总结 目录 1.1. 服务治理:Spring Cloud Eureka 39 注册中心	1 1.2. 第4章 客户端负载均衡:Spring
- matlab如何求开方,matlab中开方怎么表示
- 测试显卡矿卡用什么软件,3分钟看懂:AMD二手矿卡简明鉴别、检测教程,从此脱坑不求人...
- FOC之PI控制的理解
- Python爬取网易云音乐歌手歌曲和歌单!推荐好听的歌吗?