(faceCountour, numHairLines = 100)
| 37 | } |
| 38 | |
| 39 | export function generateHairLines0(faceCountour, numHairLines = 100) { |
| 40 | var faceCountourCopy = faceCountour.slice(0, faceCountour.length - 2); |
| 41 | var results = []; |
| 42 | for (var i = 0; i < numHairLines; i++){ |
| 43 | var numHairPoints = 20 + Math.floor(randomFromInterval(-5, 5)); |
| 44 | // we generate some hair lines |
| 45 | var hair_line = []; |
| 46 | var index_offset = Math.floor(randomFromInterval(30, 140)); |
| 47 | for (var j = 0; j < numHairPoints; j++){ |
| 48 | hair_line.push({x: faceCountourCopy[(faceCountourCopy.length - (j + index_offset)) % faceCountourCopy.length][0], y:faceCountourCopy[(faceCountourCopy.length - (j + index_offset)) % faceCountourCopy.length][1]}); |
| 49 | } |
| 50 | var d0 = computeBezierCurve(hair_line, numHairPoints); |
| 51 | hair_line = [] |
| 52 | index_offset = Math.floor(randomFromInterval(30, 140)); |
| 53 | for (var j = 0; j < numHairPoints; j++){ |
| 54 | hair_line.push({x: faceCountourCopy[(faceCountourCopy.length - (-j + index_offset)) % faceCountourCopy.length][0], y:faceCountourCopy[(faceCountourCopy.length - (-j + index_offset)) % faceCountourCopy.length][1]}); |
| 55 | } |
| 56 | var d1 = computeBezierCurve(hair_line, numHairPoints); |
| 57 | var d = []; |
| 58 | for (var j = 0; j < numHairPoints; j++){ |
| 59 | d.push([d0[j][0] * (j * (1 / numHairPoints)) ** 2 + d1[j][0] * (1 - (j * (1 / numHairPoints)) ** 2), d0[j][1] * (j * (1 / numHairPoints)) ** 2 + d1[j][1] * (1 - (j * (1 / numHairPoints)) ** 2)]); |
| 60 | } |
| 61 | |
| 62 | results.push(d); |
| 63 | } |
| 64 | return results; |
| 65 | } |
| 66 | export function generateHairLines1(faceCountour, numHairLines = 100) { |
| 67 | var faceCountourCopy = faceCountour.slice(0, faceCountour.length - 2); |
| 68 | var results = []; |
nothing calls this directly
no test coverage detected