Skill: limits
Hole Explorer
Squeeze x toward the hole in (x² − k²)/(x − k) and watch the function values close in on the limit from both sides.
1 Hole Explorer
Squeeze x toward the hole in (x² − k²)/(x − k) and watch the function values close in on the limit from both sides.
Controls
f(x) = (x² − k²)/(x − k) has a hole at x = k. Drag k and watch the approach table squeeze toward the limit.
2 Keep going
Read the lesson, drill practice, or use the calculator.
/* ===== limits lab glue (DOM + canvas) ===== */
(function(){
'use strict';
var L=window.__FIBO_API__;
var state={k:3};
var cv=document.getElementById('labCanvas'), ctx=cv.getContext('2d');
var W=cv.width, H=cv.height, S=34, OX=W/2, OY=H/2;
function X(x){ return OX+S*x; }
function Y(y){ return OY-S*y; }
function draw(){
var d=L.compute(state);
var k=d.k;
ctx.clearRect(0,0,W,H);
ctx.fillStyle='#F1F7FF'; ctx.fillRect(0,0,W,H);
var gx, gy;
for(gx=-10;gx<=10;gx++){
ctx.strokeStyle=(gx===0)?'#F4B740':'#dbe4f0'; ctx.lineWidth=(gx===0)?2:1;
ctx.beginPath(); ctx.moveTo(X(gx),0); ctx.lineTo(X(gx),H); ctx.stroke();
}
for(gy=-8;gy<=8;gy++){
ctx.strokeStyle=(gy===0)?'#F4B740':'#dbe4f0'; ctx.lineWidth=(gy===0)?2:1;
ctx.beginPath(); ctx.moveTo(0,Y(gy)); ctx.lineTo(W,Y(gy)); ctx.stroke();
}
ctx.strokeStyle='#2563EB'; ctx.lineWidth=3;
ctx.beginPath();
ctx.moveTo(X(-9),Y(-9+k));
ctx.lineTo(X(9),Y(9+k));
ctx.stroke();
var i;
for(i=0;i
'; }).join(''); document.getElementById('labReadout').innerHTML= 'Hole at ('+k+', '+(2*k)+') — the limit is '+(2*k)+', not the missing value.'+ '
| x | f(x) |
|---|
'; } function sync(){ state.k=parseInt(document.getElementById('labK').value,10); document.getElementById('labKv').textContent=state.k; draw(); } document.getElementById('labK').addEventListener('input',sync); sync(); })();