import csv
import math
import cv2 as cv
import numpy as np
def drawpicture():
# (233,1600,3)分别是宽、高、通道数
canvas = np.zeros((233, 1600, 3), dtype=np.uint8)
# file = open('F:/zhengwangwork/test csv/22.csv') # 打开csv文件
file = open('F:/test/csvFile/1.csv') # 打开csv文件
reader = csv.reader(file) # 读取csv文件
data = list(reader) # 将csv数据转化为列表
length_h = len(data) # 得到数据行数
lenght_l = len(data[0]) # 得到每行长度
x = list()
y = list()
z = list()
# 绘制散点图
for i in range(0, length_h): # 从第一行开始读取
x.append(int(eval(data[i][0]))+7) # 将第一列数据从第一行读取到最后一行付给列表x
y.append(eval(data[i][2])) # 将第三列数据从第一行读取到最后一行付给列表y
z.append(eval(data[i][1]))
pts = zip(x, y)
col = []
print(type(z[1]))
dict = {"0": (0, 255, 255), "1": (0, 0, 255), "2": (255, 192, 255), "3": (255, 127, 255), "4": (255, 64, 255),
"5": (127, 255, 0),
"6": (127, 0, 255), "7": (64, 0, 255), "8": (0, 255, 0), "9": (0, 127, 0), "10": (255, 192, 0),
"11": (255, 127, 0), "12": (255, 64, 0), "13": (127, 55, 255), "14": (127, 0, 0), "15": (64, 0, 0),
"16": (0, 0, 127), "17": (255, 0, 255), "18": (255, 0, 0), " 19": (127, 240, 0), "20": (127, 240, 255),
"21": (255, 15, 255), "22": (255, 15, 0), "23": (0, 0, 120), "24": (255, 255, 255), "25": (255, 255, 0),
" 26": (255, 240, 255), "27": (255, 240, 0)}
# # 通过循环将不同的通道值对应的颜色加到col数组中,其中data1就是db数组
for i in range(0, len(z)):
col.append(dict[str(z[i])])
i = 0
for pt in pts:
# 前项45度(绿色的)
if z[i] == 5 or z[i] == 6 or z[i] == 19:
angel = 37.5
angelPi = (angel / 180) * math.pi
x = int(4 * math.cos(angelPi) + pt[0])
y = int(4 * math.sin(angelPi) + pt[1])
x1 = int(-4 * math.cos(angelPi) + pt[0])
y1 = int(-4 * math.sin(angelPi) + pt[1])
print(x, y)
print(x1, y1)
cv.line(canvas, (x, y), (x1, y1), col[i], thickness=2)
# 后向45度
elif z[i] == 13 or z[i] == 14 or z[i] == 20:
angel = 37.5
angelPi = (angel / 180) * math.pi
x = int(4 * math.cos(angelPi) + pt[0])
y = int(-4 * math.sin(angelPi) + pt[1])
x1 = int(-4 * math.cos(angelPi) + pt[0])
y1 = int(4 * math.sin(angelPi) + pt[1])
cv.line(canvas, (x, y), (x1, y1), col[i], thickness=2)
# 前项75度
elif z[i] == 2 or z[i] == 3 or z[i] == 4 or z[i] == 7 or z[i] == 17 or z[i] == 21 or z[i] == 24 or z[i] == 26:
angel = 67.5
angelPi = (angel / 180) * math.pi
# x = int(4 * math.cos(angelPi) + pt[0])
# y = int(4 * math.sin(angelPi) + pt[1])
# x1 = int(-4 * math.cos(angelPi) + pt[0])
# y1 = int(-4 * math.sin(angelPi) + pt[1])
x = int(4 * math.cos(angelPi) + pt[0])
y = int(-4 * math.sin(angelPi) + pt[1])
x1 = int(-4 * math.cos(angelPi) + pt[0])
y1 = int(4 * math.sin(angelPi) + pt[1])
print(x, y)
print(x1, y1)
cv.line(canvas, (x, y), (x1, y1), col[i], thickness=2)
# 后项75度
elif z[i] == 10 or z[i] == 11 or z[i] == 12 or z[i] == 15 or z[i] == 18 or z[i]==22 or z[i] == 25 or z[i] == 27:
angel = 67.5
angelPi = (angel / 180) * math.pi
x = int(4 * math.cos(angelPi) + pt[0])
y = int(4 * math.sin(angelPi) + pt[1])
x1 = int(-4 * math.cos(angelPi) + pt[0])
y1 = int(-4 * math.sin(angelPi) + pt[1])
cv.line(canvas, (x, y), (x1, y1), col[i], thickness=2)
# 0度[0,1,8,9,16,23]
else:
x = (pt[0] - 4, pt[1])
y = (pt[0] + 4, pt[1])
cv.line(canvas, x, y, col[i], thickness=2)
i = i + 1
# 展示绘制的图形
cv.namedWindow('Basic Graph', cv.WINDOW_NORMAL)
cv.imshow('Basic Graph', canvas)
# 保存绘制的图像
cv.imwrite('Basic_Graph.png', canvas)
cv.waitKey()
if __name__ == '__main__':
drawpicture()