|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
window.makeStudents = function(){ |
|
var seed = new Math.seedrandom('he4a15') |
|
var rand = d3.randomUniform.source(seed)(0, 1) |
|
var letters = 'abcdefgijlmnopqrsuvwxyz' |
|
letters = (letters + letters.toUpperCase()).split('') |
|
|
|
var nSickCols = 6 |
|
var mSickCols = 8 |
|
var fSickCols = nSickCols*2 - mSickCols |
|
|
|
var students = d3.range(nCols*nCols).map(i => { |
|
var letter = letters[~~d3.randomUniform.source(seed)(0, letters.length)()] |
|
|
|
var isMale = i % 2 == 0 |
|
var isSick = i < (isMale ? mSickCols : fSickCols)*nCols |
|
var grade = isSick*.5 + rand() |
|
var pos = {} |
|
|
|
return {letter, isSick, isMale, grade, pos} |
|
}) |
|
|
|
students = _.sortBy(students, d => -d.grade) |
|
d3.nestBy(students, d => d.isSick).forEach(group => { |
|
var isSick = group[0].isSick |
|
|
|
var sickCols = nSickCols |
|
var cols = isSick ? sickCols : nCols - sickCols |
|
var xOffset = isSick ? 0 : sickCols |
|
|
|
group.forEach((d, i) => { |
|
d.pos.allIJ = [cols - 1 - (i % cols) + xOffset, ~~(i/cols)] |
|
var spreadIJ = d.pos.allIJ.slice() |
|
if (!d.isSick) spreadIJ[0] += .1 |
|
d.pos.all = spreadIJ.map(d => d*c.width/10) |
|
}) |
|
}) |
|
|
|
d3.nestBy(students, d => d.isSick + '-' + d.isMale).forEach(group => { |
|
var isSick = group[0].isSick |
|
var isMale = group[0].isMale |
|
|
|
var sickCols = isMale ? mSickCols : fSickCols |
|
var cols = isSick ? sickCols : nCols - sickCols |
|
var xOffset = isSick ? 0 : sickCols |
|
var yOffset = isMale ? nCols/2 + 2 : 0 |
|
|
|
group.forEach((d, i) => { |
|
d.pos.sexIJ = [cols - 1 - (i % cols) + xOffset, ~~(i/cols) + yOffset] |
|
d.pos.sexGroupIJ = [cols - 1 - (i % cols) + xOffset, ~~(i/cols)] |
|
var spreadIJ = d.pos.sexIJ.slice() |
|
if (!d.isSick) spreadIJ[0] += .1 |
|
d.pos.sex = spreadIJ.map(d => d*c.width/10) |
|
}) |
|
}) |
|
|
|
students.maleOffsetJ = nCols/2 + 2 |
|
students.maleOffsetPx= students.maleOffsetJ*c.width/10 |
|
|
|
students.fSickCols = fSickCols |
|
students.mSickCols = mSickCols |
|
|
|
students.colWidth = c.width/10 |
|
|
|
students.rand = rand |
|
return students |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
if (window.init) window.init() |
|
|