Spaces:
Sleeping
Sleeping
| from PIL import Image, ImageDraw | |
| import numpy as np | |
| import math | |
| import shapely | |
| from shapely.geometry import LineString | |
| from canvas import * | |
| def _re_coord(point): | |
| return (point[0]+c_length/2, c_height/2-point[1]) | |
| def _back_coord(point): | |
| return (point[0]-c_length/2, c_height/2-point[1]) | |
| def line_end(start, angle, length): | |
| x, y = start | |
| endy = y + length * math.sin(math.radians(-angle)) | |
| endx = x + length * math.cos(math.radians(-angle)) | |
| return (endx, endy) | |
| def lines_intersection(l1, l2): | |
| line1 = LineString([l1['start'], l1['end']]) | |
| line2 = LineString([l2['start'], l2['end']]) | |
| int_pt = line1.intersection(line2) | |
| return (int_pt.x, int_pt.y) | |
| def p2d (start, end): | |
| angle = np.rad2deg(np.arctan2(end[1] - start[1], end[0] - start[0])) | |
| dist = np.linalg.norm(np.array(start) - np.array(end)) | |
| x_range = (start[0], end[0]) | |
| mid_point = ((start[0]+end[0])/2, (start[1]+end[1])/2) | |
| data = { | |
| 'angle':angle, | |
| 'dist':dist, | |
| 'x_range':x_range, | |
| 'mid_point':mid_point | |
| } | |
| return data | |
| def line2P(start,end,color=(0,0,0),width=1): | |
| draw.line([_re_coord(start), _re_coord(end)], fill=color, width=width, joint=None) | |
| data = {'start':start, | |
| 'end':end} | |
| return data | |
| def lineDraw(start, angle, length, color=(0,0,0), width=1): | |
| end = line_end(_re_coord(start), angle, length) | |
| draw.line([_re_coord(start), end], fill=color, width=width, joint=None) | |
| data = {'start':start, | |
| 'end':_back_coord(end)} | |
| return data | |
| def lineFunc(x_range, alpha=1, const = 0, color=(0,0,0), width=1): | |
| start_x = x_range[0]-c_length/2 | |
| end_x =x_range[-1]-c_length/2 #the last one of range | |
| start_y = c_height - (alpha*start_x + const) | |
| end_y = c_height - (alpha*end_x + const) | |
| draw.line([(start_x,start_y), (end_x, end_y)], fill=color, width=width, joint=None) | |
| data = {'start':(start_x,start_y), | |
| 'end':(end_x,end_y)} | |
| return data |