MCPcopy
hub / github.com/txstc55/ugly-avatar / generateEyePoints

Function generateEyePoints

src/utils/eye_shape.js:66–137  ·  view source on GitHub ↗
(rands, width = 50)

Source from the content-addressed store, hash-verified

64}
65
66export function generateEyePoints(rands, width = 50) {
67
68 let P0_upper = [-width / 2 + rands.P0_upper_randX * width / 16, rands.P0_upper_randY * rands.height_upper / 16];
69 let P3_upper = [width / 2 + rands.P3_upper_randX * width / 16, rands.P3_upper_randY * rands.height_upper / 16];
70 let P0_lower = P0_upper;// Starting at the same point as the upper eyelid
71 let P3_lower = P3_upper;// Ending at the same point as the upper eyelid
72 let eye_true_width = P3_upper[0] - P0_upper[0];
73
74 // Upper eyelid control points
75 let P1_upper = [P0_upper[0] + rands.offset_upper_left_x, P0_upper[1] + rands.offset_upper_left_y]; // First control point
76 let P2_upper = [P3_upper[0] - rands.offset_upper_right_x, P3_upper[1] + rands.offset_upper_right_y]; // Second control point
77
78
79 // Lower eyelid control points
80 let P1_lower = [P0_lower[0] + rands.offset_lower_left_x, P0_lower[1] - rands.offset_lower_left_y]; // First control point
81 let P2_lower = [P3_lower[0] - rands.offset_lower_right_x, P3_lower[1] - rands.offset_lower_right_y]; // Second control point
82
83 // now we generate the points for the upper eyelid
84 let upper_eyelid_points = [];
85 let upper_eyelid_points_left_control = [];
86 let upper_eyelid_points_right_control = [];
87 let upper_eyelid_left_control_point = [P0_upper[0] * (1 - rands.left_converge0) + P1_lower[0] * rands.left_converge0, P0_upper[1] * (1 - rands.left_converge0) + P1_lower[1] * rands.left_converge0];
88 let upper_eyelid_right_control_point = [P3_upper[0] * (1 - rands.right_converge0) + P2_lower[0] * rands.right_converge0, P3_upper[1] * (1 - rands.right_converge0) + P2_lower[1] * rands.right_converge0];
89 for (let t = 0; t < 100; t++) {
90 upper_eyelid_points.push(cubicBezier(P0_upper, P1_upper, P2_upper, P3_upper, t / 100));
91 upper_eyelid_points_left_control.push(cubicBezier(upper_eyelid_left_control_point, P0_upper, P1_upper, P2_upper, t / 100));
92 upper_eyelid_points_right_control.push(cubicBezier(P1_upper, P2_upper, P3_upper, upper_eyelid_right_control_point, t / 100));
93 }
94
95 for (let i = 0; i < 75; i++) {
96 let weight = ((75.0 - i) / 75.0) ** 2
97 upper_eyelid_points[i] = [upper_eyelid_points[i][0] * (1 - weight) + upper_eyelid_points_left_control[i + 25][0] * weight, upper_eyelid_points[i][1] * (1 - weight) + upper_eyelid_points_left_control[i + 25][1] * weight]
98 upper_eyelid_points[i + 25] = [upper_eyelid_points[i + 25][0] * weight + upper_eyelid_points_right_control[i][0] * (1 - weight), upper_eyelid_points[i + 25][1] * weight + upper_eyelid_points_right_control[i][1] * (1 - weight)]
99 }
100
101
102 // now we generate the points for the upper eyelid
103 let lower_eyelid_points = [];
104 let lower_eyelid_points_left_control = [];
105 let lower_eyelid_points_right_control = [];
106 let lower_eyelid_left_control_point = [P0_lower[0] * (1 - rands.left_converge0) + P1_upper[0] * rands.left_converge0, P0_lower[1] * (1 - rands.left_converge0) + P1_upper[1] * rands.left_converge0];
107 let lower_eyelid_right_control_point = [P3_lower[0] * (1 - rands.right_converge1) + P2_upper[0] * rands.right_converge1, P3_lower[1] * (1 - rands.right_converge1) + P2_upper[1] * rands.right_converge1];
108 for (let t = 0; t < 100; t++) {
109 lower_eyelid_points.push(cubicBezier(P0_lower, P1_lower, P2_lower, P3_lower, t / 100));
110 lower_eyelid_points_left_control.push(cubicBezier(lower_eyelid_left_control_point, P0_lower, P1_lower, P2_lower, t / 100));
111 lower_eyelid_points_right_control.push(cubicBezier(P1_lower, P2_lower, P3_lower, lower_eyelid_right_control_point, t / 100));
112 }
113
114 for (let i = 0; i < 75; i++) {
115 let weight = ((75.0 - i) / 75.0) ** 2
116 lower_eyelid_points[i] = [lower_eyelid_points[i][0] * (1 - weight) + lower_eyelid_points_left_control[i + 25][0] * weight, lower_eyelid_points[i][1] * (1 - weight) + lower_eyelid_points_left_control[i + 25][1] * weight]
117 lower_eyelid_points[i + 25] = [lower_eyelid_points[i + 25][0] * weight + lower_eyelid_points_right_control[i][0] * (1 - weight), lower_eyelid_points[i + 25][1] * weight + lower_eyelid_points_right_control[i][1] * (1 - weight)]
118 }
119 for (let i = 0; i < 100; i++) {
120 lower_eyelid_points[i][1] = -lower_eyelid_points[i][1]
121 upper_eyelid_points[i][1] = -upper_eyelid_points[i][1]
122 }
123

Callers 1

generateBothEyesFunction · 0.85

Calls 1

cubicBezierFunction · 0.70

Tested by

no test coverage detected