fix: some rendering bugs with negative values

main
parent 9922075e16
commit 488c796122

@ -38,6 +38,8 @@ export function drawSemiplane(
p2 = b / a2 p2 = b / a2
} }
console.log('a1', a1, 'a2', a2)
const normalize = Math.sqrt(a1 ** 2 + a2 ** 2) / gradientSize const normalize = Math.sqrt(a1 ** 2 + a2 ** 2) / gradientSize
const gradient = g.createLinearGradient(p1, p2, p1 - a1 / normalize, p2 - a2 / normalize) const gradient = g.createLinearGradient(p1, p2, p1 - a1 / normalize, p2 - a2 / normalize)
@ -62,15 +64,33 @@ export function drawSemiplane(
} }
} else { } else {
if (a2 > 0) { if (a2 > 0) {
g.moveTo(-MAX_LINE_SIZE, (b - a1 * -MAX_LINE_SIZE) / a2) if (a1 >= 0) {
g.lineTo(-MAX_LINE_SIZE, MAX_LINE_SIZE) g.moveTo(-MAX_LINE_SIZE, (b - a1 * -MAX_LINE_SIZE) / a2)
g.lineTo(-MAX_LINE_SIZE, -MAX_LINE_SIZE) g.lineTo(-MAX_LINE_SIZE, MAX_LINE_SIZE)
g.lineTo(MAX_LINE_SIZE, (b - a1 * MAX_LINE_SIZE) / a2) g.lineTo(-MAX_LINE_SIZE, -MAX_LINE_SIZE)
g.lineTo(MAX_LINE_SIZE, (b - a1 * MAX_LINE_SIZE) / a2)
} else {
g.moveTo(-MAX_LINE_SIZE, (b - a1 * -MAX_LINE_SIZE) / a2)
g.lineTo(-MAX_LINE_SIZE, -MAX_LINE_SIZE)
g.lineTo(MAX_LINE_SIZE, -MAX_LINE_SIZE)
g.lineTo(MAX_LINE_SIZE, (b - a1 * MAX_LINE_SIZE) / a2)
}
} else { } else {
g.moveTo(MAX_LINE_SIZE, (b - a1 * MAX_LINE_SIZE) / a2) // g.moveTo(MAX_LINE_SIZE, (b - a1 * MAX_LINE_SIZE) / a2)
g.lineTo(MAX_LINE_SIZE, -MAX_LINE_SIZE) // g.lineTo(MAX_LINE_SIZE, -MAX_LINE_SIZE)
g.lineTo(MAX_LINE_SIZE, MAX_LINE_SIZE) // g.lineTo(MAX_LINE_SIZE, MAX_LINE_SIZE)
g.lineTo(-MAX_LINE_SIZE, (b - a1 * -MAX_LINE_SIZE) / a2) // g.lineTo(-MAX_LINE_SIZE, (b - a1 * -MAX_LINE_SIZE) / a2)
if (a1 >= 0) {
g.moveTo(-MAX_LINE_SIZE, (b - a1 * -MAX_LINE_SIZE) / a2)
g.lineTo(-MAX_LINE_SIZE, -MAX_LINE_SIZE)
g.lineTo(-MAX_LINE_SIZE, MAX_LINE_SIZE)
g.lineTo(MAX_LINE_SIZE, (b - a1 * MAX_LINE_SIZE) / a2)
} else {
g.moveTo(-MAX_LINE_SIZE, (b - a1 * -MAX_LINE_SIZE) / a2)
g.lineTo(-MAX_LINE_SIZE, MAX_LINE_SIZE)
g.lineTo(MAX_LINE_SIZE, MAX_LINE_SIZE)
g.lineTo(MAX_LINE_SIZE, (b - a1 * MAX_LINE_SIZE) / a2)
}
} }
} }
g.fill() g.fill()

@ -26,4 +26,5 @@ export const rowVectorToLatex = (vector: Vector<Rational>) =>
.join(' & ')} \\end{bmatrix}` .join(' & ')} \\end{bmatrix}`
: '' : ''
export const indexSetToLatex = (indices: number[]) => `\\{${indices.map(i => (i + 1).toString()).join(', ')}\\}` export const indexSetToLatex = (indices: number[]) =>
indices.length > 0 ? `\\{${indices.map(i => (i + 1).toString()).join(', ')}\\}` : '\\varnothing'

@ -179,14 +179,16 @@ export function computePrimalSimplexSteps(input: ProblemInput): ProblemOutput {
content: `N = \\{1, \\dots, ${A.rows}\\} \\setminus B = ${indexSetToLatex(N)}`, content: `N = \\{1, \\dots, ${A.rows}\\} \\setminus B = ${indexSetToLatex(N)}`,
}) })
comments.push({ if (N.length > 0) {
type: 'formula', comments.push({
content: [ type: 'formula',
`A_N \\xi`, content: [
`${matrixToLatex(A_N)} ${vectorToLatex(xi)}`, `A_N \\xi`,
`${vectorToLatex(A_N__xi)}`, `${matrixToLatex(A_N)} ${vectorToLatex(xi)}`,
].join(' = '), `${vectorToLatex(A_N__xi)}`,
}) ].join(' = '),
})
}
if (!A_N__xi.getData().every(x => x.leq(RationalField.zero))) { if (!A_N__xi.getData().every(x => x.leq(RationalField.zero))) {
const [k, lambda] = N.filter(i => A_N__xi.at(A_N.forwardRowIndices[i]).gt(RationalField.zero)) const [k, lambda] = N.filter(i => A_N__xi.at(A_N.forwardRowIndices[i]).gt(RationalField.zero))

Loading…
Cancel
Save