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获取脚本所在目录的正确方法
Apr 15 Python
python中正则的使用指南
Dec 04 Python
python实现的多线程端口扫描功能示例
Jan 21 Python
Python内置函数reversed()用法分析
Mar 20 Python
Python画柱状统计图操作示例【基于matplotlib库】
Jul 04 Python
基于python指定包的安装路径方法
Oct 27 Python
pycham查看程序执行的时间方法
Nov 29 Python
python 图片二值化处理(处理后为纯黑白的图片)
Nov 01 Python
Python 爬虫性能相关总结
Aug 03 Python
使用bandit对目标python代码进行安全函数扫描的案例分析
Jan 27 Python
Python中for后接else的语法使用
May 18 Python
关于Python OS模块常用文件/目录函数详解
Jul 01 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
利用php+mysql来做一个功能强大的在线计算器
2010/10/12 PHP
php中删除字符串中最先出现某个字符的实现代码
2013/02/03 PHP
PHP中$_SERVER的详细参数与说明介绍
2013/10/26 PHP
PHP连接MSSQL时nvarchar字段长度被截断为255的解决方法
2014/12/25 PHP
ucenter通信原理分析
2015/01/09 PHP
Symfony的安装和配置方法
2016/03/17 PHP
PHP文件系统管理(实例讲解)
2017/09/19 PHP
Laravel 类和接口注入相关的代码
2019/10/15 PHP
laravel model 两表联查示例
2019/10/24 PHP
学习YUI.Ext 第七天--关于View&amp;JSONView
2007/03/10 Javascript
ExtJS 2.2.1的grid控件在ie6中的显示问题
2009/05/04 Javascript
用Jquery重写windows.alert方法实现思路
2013/04/03 Javascript
JavaScript实现找出字符串中第一个不重复的字符
2014/09/03 Javascript
jQuery自带的一些常用方法总结
2014/09/03 Javascript
分享20款美化网站的 jQuery Lightbox 灯箱插件
2014/10/10 Javascript
node.js操作mongodb学习小结
2015/04/25 Javascript
javascript跑马灯抽奖实例讲解
2020/04/17 Javascript
BootStrap制作导航条实例代码
2016/05/06 Javascript
jQuery Mobile动态刷新页面样式的实现方法
2016/05/28 Javascript
Highcharts学习之坐标轴
2016/08/02 Javascript
将JSON字符串转换成Map对象的方法
2016/11/30 Javascript
使用vue框架 Ajax获取数据列表并用BootStrap显示出来
2017/04/24 Javascript
JS正则表达式封装与使用操作示例
2019/05/15 Javascript
在Vue中使用mockjs代码实例
2020/11/25 Vue.js
通过实例解析js可枚举属性与不可枚举属性
2020/12/02 Javascript
编写Python脚本来获取mp3文件tag信息的教程
2015/05/04 Python
Linux下多个Python版本安装教程
2018/08/15 Python
VSCode中autopep8无法运行问题解决方案(提示Error: Command failed,usage)
2021/03/02 Python
台湾饭店和机票预订网站:Expedia台湾
2016/08/05 全球购物
中国制造网:Made-in-China.com
2019/10/25 全球购物
金山毒霸系列的笔试题
2013/04/13 面试题
终端业务员岗位职责
2013/11/27 职场文书
水电工岗位职责
2015/02/14 职场文书
酒店辞职书范文
2015/02/26 职场文书
银行柜员工作心得体会
2016/01/23 职场文书
Java实现贪吃蛇游戏的示例代码
2022/09/23 Java/Android