python实现一个点绕另一个点旋转后的坐标


Posted in Python onDecember 04, 2019

如下所示:

(x,y)为要转的点,(pointx,pointy)为中心点,如果顺时针角度为angle

srx = (x-pointx)*cos(angle) + (y-pointy)*sin(angle)+pointx

sry = (y-pointy)*cos(angle) - (x-pointx)*sin(angle)+pointy

(x,y)为要转的点,(pointx,pointy)为中心点,如果逆时针角度为angle

nrx = (x-pointx)*cos(angle) - (y-pointy)*sin(angle)+pointx

nry = (x-pointx)*sin(angle) + (y-pointy)*cos(angle)+pointy

python实现一个点绕另一个点旋转后的坐标

python实现一个点绕另一个点旋转后的坐标

import numpy as np
import math
import matplotlib.pyplot as plt
# 绕pointx,pointy逆时针旋转
def Nrotate(angle,valuex,valuey,pointx,pointy):
 valuex = np.array(valuex)
 valuey = np.array(valuey)
 nRotatex = (valuex-pointx)*math.cos(angle) - (valuey-pointy)*math.sin(angle) + pointx
 nRotatey = (valuex-pointx)*math.sin(angle) + (valuey-pointy)*math.cos(angle) + pointy
 return nRotatex, nRotatey
# 绕pointx,pointy顺时针旋转
def Srotate(angle,valuex,valuey,pointx,pointy):
 valuex = np.array(valuex)
 valuey = np.array(valuey)
 sRotatex = (valuex-pointx)*math.cos(angle) + (valuey-pointy)*math.sin(angle) + pointx
 sRotatey = (valuey-pointy)*math.cos(angle) - (valuex-pointx)*math.sin(angle) + pointy
 return sRotatex,sRotatey
pointx = 1
pointy = 1
sPointx ,sPointy = Nrotate(math.radians(45),pointx,pointy,0,0)
print(sPointx,sPointy)
plt.plot([0,pointx],[0,pointy])
plt.plot([0,sPointx],[0,sPointy])
plt.xlim(-3.,3.)
plt.ylim(-3.,3.)
plt.xticks(np.arange(-3.,3.,1))
plt.yticks(np.arange(-3.,3.,1))
plt.show()

python实现一个点绕另一个点旋转后的坐标

import numpy as np
import math
import matplotlib.pyplot as plt
# 绕pointx,pointy逆时针旋转
def Nrotate(angle,valuex,valuey,pointx,pointy):
 valuex = np.array(valuex)
 valuey = np.array(valuey)
 nRotatex = (valuex-pointx)*math.cos(angle) - (valuey-pointy)*math.sin(angle) + pointx
 nRotatey = (valuex-pointx)*math.sin(angle) + (valuey-pointy)*math.cos(angle) + pointy
 return nRotatex, nRotatey
# 绕pointx,pointy顺时针旋转
def Srotate(angle,valuex,valuey,pointx,pointy):
 valuex = np.array(valuex)
 valuey = np.array(valuey)
 sRotatex = (valuex-pointx)*math.cos(angle) + (valuey-pointy)*math.sin(angle) + pointx
 sRotatey = (valuey-pointy)*math.cos(angle) - (valuex-pointx)*math.sin(angle) + pointy
 return sRotatex,sRotatey
 
x1 = np.array([1,2,3])
y1 = np.array([1,2,3])
x2 = np.array([3,6])
y2 = np.array([2,1])
# x2往x1上拼
disx = x2[0]-x1[0]
disy = y2[0]-y1[0]
removeX2 = x2-disx
removeY2 = y2-disy
tany1 = y1[-1]-y1[0]
tanx1 = x1[-1]-x1[0]
angle1 = math.degrees(np.arctan(tany1/tanx1))
tany2 = y2[-1]-y2[0]
tanx2 = x2[-1]-x2[0]
angle2 = math.degrees(np.arctan(tany2/tanx2))
disAngle = angle2-angle1
print(angle1)
print(angle2)
print(disAngle)
if disAngle<0:
 rotateX,rotateY = Nrotate(math.radians(abs(disAngle)),removeX2,removeY2,x1[0],y1[0])
else:
 rotateX,rotateY = Srotate(math.radians(abs(disAngle)),removeX2,removeY2,x1[0],y1[0])
plt.plot(x1,y1,color='red')
plt.plot(removeX2,removeY2,color='green')
plt.scatter(rotateX,rotateY,color='yellow')
plt.xlim(0.,10.)
plt.ylim(0.,10.)
plt.xticks(np.arange(0.,10.,1))
plt.yticks(np.arange(0.,10.,1))
plt.show()

python实现一个点绕另一个点旋转后的坐标

以上这篇python实现一个点绕另一个点旋转后的坐标就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python交换变量
Sep 06 Python
测试、预发布后用python检测网页是否有日常链接
Jun 03 Python
使用Python脚本来控制Windows Azure的简单教程
Apr 16 Python
从局部变量和全局变量开始全面解析Python中变量的作用域
Jun 16 Python
Python处理PDF及生成多层PDF实例代码
Apr 24 Python
基于Python对象引用、可变性和垃圾回收详解
Aug 21 Python
Python实现文件信息进行合并实例代码
Jan 17 Python
python生成器与迭代器详解
Jan 01 Python
python实现给微信指定好友定时发送消息
Apr 29 Python
Django中日期时间型字段进行年月日时分秒分组统计
Nov 27 Python
scrapy头部修改的方法详解
Dec 06 Python
Python中requests库的用法详解
Jun 05 Python
Django配置文件代码说明
Dec 04 #Python
python实现回旋矩阵方式(旋转矩阵)
Dec 04 #Python
在Django下创建项目以及设置settings.py教程
Dec 03 #Python
Django自带的加密算法及加密模块详解
Dec 03 #Python
python Opencv计算图像相似度过程解析
Dec 03 #Python
django 中使用DateTime常用的时间查询方式
Dec 03 #Python
在django中自定义字段Field详解
Dec 03 #Python
You might like
模仿JQuery sortable效果 代码有错但值得看看
2009/11/05 Javascript
从URL中提取参数与将对象转换为URL查询参数的实现代码
2012/01/12 Javascript
Seajs的学习笔记
2014/03/04 Javascript
jQuery获得包含margin的outerWidth和outerHeight的方法
2015/03/25 Javascript
Backbone.js的Hello World程序实例
2015/06/19 Javascript
js window对象属性和方法相关资料整理
2015/11/11 Javascript
jQuery插件实现可输入和自动匹配的下拉框
2016/10/24 Javascript
JS 拦截全局ajax请求实例解析
2016/11/29 Javascript
vue通过路由实现页面刷新的方法
2018/01/25 Javascript
Node.js 使用jade模板引擎的示例
2018/05/11 Javascript
vue2.0 可折叠列表 v-for循环展示的实例
2018/09/07 Javascript
原生JS实现列表内容自动向上滚动效果
2019/05/22 Javascript
layer.open 子页面弹出层向父页面传输数据的例子
2019/09/26 Javascript
将RGB值转换为灰度值的简单算法
2019/10/09 Javascript
JavaScript ECMA-262-3 深入解析(二):变量对象实例详解
2020/04/25 Javascript
[03:23]我的刀塔你不可能这么可爱 第一期金萌萌的故事
2014/06/20 DOTA
使用Python简单的实现树莓派的WEB控制
2016/02/18 Python
python脚本设置超时机制系统时间的方法
2016/02/21 Python
Python列表推导式与生成器表达式用法示例
2018/02/08 Python
Python3正则匹配re.split,re.finditer及re.findall函数用法详解
2018/06/11 Python
python实现二维数组的对角线遍历
2019/03/02 Python
Python 实现微信防撤回功能
2019/04/29 Python
使用 Django Highcharts 实现数据可视化过程解析
2019/07/31 Python
python 爬虫百度地图的信息界面的实现方法
2019/10/27 Python
浅谈利用缓存来优化HTML5 Canvas程序的性能
2015/05/12 HTML / CSS
UGG美国官网:购买UGG雪地靴、拖鞋和鞋子
2017/12/31 全球购物
激光脱毛、蓝光和护肤:Tria Beauty
2019/03/28 全球购物
美国基督教约会网站:ChristianCafe.com
2020/02/04 全球购物
node中使用shell脚本的方法步骤
2021/03/23 Javascript
医学毕业生自荐信
2013/10/11 职场文书
开学典礼感言
2014/02/16 职场文书
临时用工协议书范本
2014/10/29 职场文书
办公室文员岗位职责
2015/02/04 职场文书
个人廉政承诺书
2015/04/28 职场文书
提档介绍信范文
2015/10/22 职场文书
使用CSS设置滚动条样式
2022/01/18 HTML / CSS