数据分析–不同形式坐标点转换
在绘制数学矩形时, 数据源的坐标形式不尽相同, 最好能转换成角点坐标,这样最方便绘制图像
中心点坐标,长宽,偏转角度 转换 矩形角坐标 2D
import math
def parameter_to_point_2d(x, y, width, length, angle):
"""
输入中心点坐标,长宽,偏转角度 返回2d坐标点
Args:
x: 中心点坐标x
y: 中心点坐标y
width: 宽 对应x轴
length: 高 对应y轴
angle: 偏转角度
Returns:
2d坐标点4个点坐标 顺序 {lt;lb;rb;rt;};
"""
anglePi = angle * math.pi / 180.0 # 计算角度
cosA = math.cos(anglePi)
sinA = math.sin(anglePi)
x1 = x - 0.5 * length
y1 = y - 0.5 * width
x0 = x + 0.5 * length
y0 = y1
x2 = x1
y2 = y + 0.5 * width
x3 = x0
y3 = y2
x0n = (x0 - x) * cosA - (y0 - y) * sinA + x
y0n = (x0 - x) * sinA + (y0 - y) * cosA + y
x1n = (x1 - x) * cosA - (y1 - y) * sinA + x
y1n = (x1 - x) * sinA + (y1 - y) * cosA + y
x2n = (x2 - x) * cosA - (y2 - y) * sinA + x
y2n = (x2 - x) * sinA + (y2 - y) * cosA + y
x3n = (x3 - x) * cosA - (y3 - y) * sinA + x
y3n = (x3 - x) * sinA + (y3 - y) * cosA + y
return [[x0n, y0n], [x1n, y1n], [x2n, y2n], [x3n, y3n]]
中心点坐标,长宽高,偏转角度 转换 矩形角坐标 3D
import math
def parameter_to_point_3d(x, y, length, width, height, angle):
"""
输入中心点坐标,长宽高,偏转角度 返回3d坐标点
Args:
x: 中心点坐标x
y: 中心点坐标y
length: 长 对应x轴
width: 宽 对应y轴
height: 高 对应z轴
angle: 偏转角度
Returns:
3d坐标点8个点坐标 顺序 {lower_lt;lower_lb;lower_rb;lower_rt;upper_lt;upper_lb;upper_rb;upper_rt;};
"""
anglePi = angle * math.pi / 180.0 # 计算角度
cosA = math.cos(anglePi)
sinA = math.sin(anglePi)
x1 = x - 0.5 * length
y1 = y - 0.5 * width
x0 = x + 0.5 * length
y0 = y1
x2 = x1
y2 = y + 0.5 * width
x3 = x0
y3 = y2
x0n = (x0 - x) * cosA - (y0 - y) * sinA + x
y0n = (x0 - x) * sinA + (y0 - y) * cosA + y
x1n = (x1 - x) * cosA - (y1 - y) * sinA + x
y1n = (x1 - x) * sinA + (y1 - y) * cosA + y
x2n = (x2 - x) * cosA - (y2 - y) * sinA + x
y2n = (x2 - x) * sinA + (y2 - y) * cosA + y
x3n = (x3 - x) * cosA - (y3 - y) * sinA + x
y3n = (x3 - x) * sinA + (y3 - y) * cosA + y
return [[x0n, y0n, 0], [x1n, y1n, 0], [x2n, y2n, 0], [x3n, y3n, 0], [x0n, y0n, height], [x1n, y1n, height],
[x2n, y2n, height], [x3n, y3n, height]]