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中的pass语句使用方法讲解
May 14 Python
在Django中编写模版节点及注册标签的方法
Jul 20 Python
python如何去除字符串中不想要的字符
Jul 05 Python
Python实现爬虫从网络上下载文档的实例代码
Jun 13 Python
对Python闭包与延迟绑定的方法详解
Jan 07 Python
Python日志:自定义输出字段 json格式输出方式
Apr 27 Python
python爬虫把url链接编码成gbk2312格式过程解析
Jun 08 Python
Python基于httpx模块实现发送请求
Jul 07 Python
python读取xml文件方法解析
Aug 04 Python
python中的unittest框架实例详解
Feb 05 Python
python opencv实现图像配准与比较
Feb 09 Python
Python OpenCV实现图像模板匹配详解
Apr 07 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
基于mysql的论坛(3)
2006/10/09 PHP
PHP SPL标准库中的常用函数介绍
2015/05/11 PHP
PHP内置函数生成随机数实例
2019/01/18 PHP
thinkphp5框架调用其它控制器方法 实现自定义跳转界面功能示例
2019/07/03 PHP
两种方法实现文本框输入内容提示消失
2013/03/17 Javascript
js带按钮的提示框可供选择示例代码
2013/09/17 Javascript
鼠标移到div,浮层显示明细,弹出层与div的上边距左边距重合(示例代码)
2013/12/14 Javascript
chrome下jq width()方法取值为0的解决方法
2014/05/26 Javascript
Javascript学习笔记之 对象篇(四) : for in 循环
2014/06/24 Javascript
JQuery EasyUI 加载两次url的原因分析及解决方案
2014/08/18 Javascript
jquery实现一个简单好用的弹出框
2014/09/26 Javascript
js中document.write的那点事
2014/12/12 Javascript
jquery通过closest选择器修改上级元素的方法
2015/03/17 Javascript
Angular-Touch库用法示例
2016/12/22 Javascript
jQuery中绑定事件bind() on() live() one()的异同
2017/02/23 Javascript
Angular 2.0+ 的数据绑定的实现示例
2017/08/09 Javascript
ES6学习教程之对象字面量详解
2017/10/09 Javascript
JS关于刷新页面的相关总结
2018/05/09 Javascript
微信小程序基于canvas渐变实现的彩虹效果示例
2019/05/03 Javascript
vue-cli配置全局sass、less变量的方法
2019/06/06 Javascript
高性能js数组去重(12种方法,史上最全)
2019/12/21 Javascript
electron 如何将任意资源打包的方法步骤
2020/04/16 Javascript
vue实现可移动的悬浮按钮
2021/03/04 Vue.js
python之PyMongo使用总结
2017/05/26 Python
Sanic框架基于类的视图用法示例
2018/07/18 Python
python 通过视频url获取视频的宽高方式
2019/12/10 Python
如何提高python 中for循环的效率
2020/04/15 Python
python中使用input()函数获取用户输入值方式
2020/05/03 Python
用canvas实现图片滤镜效果附演示
2013/11/05 HTML / CSS
美国批发零售网站:GearXS
2016/07/26 全球购物
精美的手工家居和生活用品:Nkuku
2019/11/01 全球购物
会计专业大学生求职信范文
2014/01/28 职场文书
销售行政专员岗位职责
2014/06/10 职场文书
汉语言文学专业求职信
2014/06/19 职场文书
租车协议书范本2014
2014/11/17 职场文书
nginx配置proxy_pass中url末尾带/与不带/的区别详解
2021/03/31 Servers