diff --git a/experiment/simulation/LettersPage/SmaK/index.html b/experiment/simulation/LettersPage/SmaK/index.html new file mode 100644 index 0000000..250e25e --- /dev/null +++ b/experiment/simulation/LettersPage/SmaK/index.html @@ -0,0 +1,330 @@ + + + + + + + Connect Dots + + + + + +
+ +
+
+
+
+
+
+ + + Overlay Image + Overlay Image + Overlay Image + + + + + +
+ + + + + \ No newline at end of file diff --git a/experiment/simulation/LettersPage/SmaK/k-new.png b/experiment/simulation/LettersPage/SmaK/k-new.png new file mode 100644 index 0000000..0589453 Binary files /dev/null and b/experiment/simulation/LettersPage/SmaK/k-new.png differ diff --git a/experiment/simulation/LettersPage/SmaK/k.css b/experiment/simulation/LettersPage/SmaK/k.css new file mode 100644 index 0000000..5172d81 --- /dev/null +++ b/experiment/simulation/LettersPage/SmaK/k.css @@ -0,0 +1,147 @@ +body { + display: flex; + justify-content: center; /* Center horizontally */ + align-items: center; /* Center vertically */ + height: 100vh; /* Full height of the viewport */ + margin: 0; /* Remove default margin */ +} + +#canvas-container { + position: relative; + width: 400px; + height: 400px; + border: 1px solid black; + display: flex; + justify-content: center; + align-items: center; +} + +#canvas { + position: absolute; + top: 0; + left: 0; + border: 1px solid black; + z-index: 10; + cursor: url('data:image/x-icon;base64,AAACAAEAICAQAAAAAADoAgAAFgAAACgAAAAgAAAAQAAAAAEABAAAAAAAAAIAAAAAAAAAAAAAEAAAAAAAAAAAAAAAhYWFAPqv6ADgm4sASkpKAJ/l7QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACIAAAAAAAAAAAAAAAAAAAEiIAAAAAAAAAAAAAAAAAAxEiIAAAAAAAAAAAAAAAADMxEgAAAAAAAAAAAAAAAAMzMxAAAAAAAAAAAAAAAAAzMzMAAAAAAAAAAAAAAAADMzMwAAAAAAAAAAAAAAAAMzMzAAAAAAAAAAAAAAAAAzMzMAAAAAAAAAAAAAAAADMzMwAAAAAAAAAAAAAAAABTMzAAAAAAAAAAAAAAAAAFVTMAAAAAAAAAAAAAAAAABFVQAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////////////////////////////////////////////////P////h////wP///4H///8D///+B////A////gf///wP///4H///+D////B////w////8///////////////w=='), auto; + +} + +.dot { + position: absolute; + width: 10px; + height: 10px; + background-color: red; + border-radius: 50%; + transform: translate(-50%, -50%); +} + + + + +#stroke1 { + + display: none; + position: absolute; + top: 08px; + left: 90px; + width: 15px; + height: 305px; + + +} + +#stroke2 { + + display: none; + position: absolute; + top: 50px; + left: 170px; + width: 15px; + height: 210px; + transform: rotate(54deg); + +} + +#stroke3 { + + display: none; + position: absolute; + top: 155px; + left: 200px; + width: 15px; + height: 183px; + transform: rotate(137deg); + +} + +#stroke4 { + + display: none; + position: absolute; + top: 248px; + left: 211px; + width: 10px; + height: 143px; + transform: rotate(90deg); + +} +#sbox { + position: relative; + left: 115px; + width: 400px; + height: 400px; + z-index: -2; + display: none; +} + +#trace { + position: relative; + bottom: 20px; + right: 90px; + width: 600px; + height: 550px; + z-index: -10; +} + +.arrrow1 { + + position: absolute; + top: 80px; + left: 30px; + width: 40px; + height: 240px; + transform: rotate(180deg); + z-index: 0; +} +.arrrow2 { + + top: 50px; + left: 170px; + position: absolute; + transform: rotate(55deg); + z-index: 0; + width: 30px; + height: 110px; + z-index: -2; +} +.arrrow3 { + + position: absolute; + transform: rotate(135deg); + z-index: 0; + top: 140px; + left: 250px; + width: 20px; + height: 160px; +} + +.arrrow4 { + + position: absolute; + top: 280px; + left: 205px; + width: 30px; + height: 110px; + transform: rotate(90deg); + z-index: 0; +} \ No newline at end of file diff --git a/experiment/simulation/LettersPage/SmaK/k.html b/experiment/simulation/LettersPage/SmaK/k.html new file mode 100644 index 0000000..1704902 --- /dev/null +++ b/experiment/simulation/LettersPage/SmaK/k.html @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + Virtual Labs + + + + + +
+ +

Lettering

+

Letter k

+ +

Rules-

+

1] Draw the line in the direction of the arrow on the trace of the letter.

+

2] To draw, click on the starting point and drag the cursor to end point .

+ +
+ +
+
+
+
+
+
+ + + Overlay Image + Overlay Image + Overlay Image + + + + + +
+ +

Congrats you have learnt to draw Letter k

+ + + + + +
+ + + + + + + \ No newline at end of file diff --git a/experiment/simulation/LettersPage/SmaK/k.js b/experiment/simulation/LettersPage/SmaK/k.js new file mode 100644 index 0000000..a7c3160 --- /dev/null +++ b/experiment/simulation/LettersPage/SmaK/k.js @@ -0,0 +1,147 @@ +const canvas = document.getElementById('canvas'); +const ctx = canvas.getContext('2d'); +const dot3 = document.getElementById('dot3'); +const dot1 = document.getElementById('dot1'); +const dot2 = document.getElementById('dot2'); +const dot4 = document.getElementById('dot4'); +const dot5 = document.getElementById('dot5'); +const dot6 = document.getElementById('dot6'); // Added dot6 +const arrow1 = document.getElementById('arrow1'); +const arrow2 = document.getElementById('arrow2'); +const arrow3 = document.getElementById('arrow3'); + + +let isDrawing = false; +let startX = 0; +let startY = 0; +let tolerance = 30; // Tolerance radius for dot connection +let nextConnection = 'dot3-dot1'; // Start with connecting dot3 to dot1 + +arrow1.style.display = 'block'; // Initially, arrow1 is visible +arrow2.style.display = 'none'; +arrow3.style.display = 'none'; + + +function checkDotTolerance(dot, x, y) { + return Math.hypot(x - (dot.offsetLeft + 5), y - (dot.offsetTop + 5)) <= tolerance; +} + +function drawToleranceCircle(dot, ctx) { + ctx.beginPath(); + ctx.arc(dot.offsetLeft + 5, dot.offsetTop + 5, tolerance, 0, 2 * Math.PI); + ctx.strokeStyle = 'rgba(255, 200, 0, 0.5)'; // Visual guide for connection + ctx.stroke(); +} + +function startDrawing(e) { + const rect = canvas.getBoundingClientRect(); + const x = e.clientX - rect.left; + const y = e.clientY - rect.top; + let targetDot; + + switch (nextConnection) { + case 'dot3-dot1': + targetDot = dot3; + break; + case 'dot2-dot4': + targetDot = dot2; + break; + case 'dot5-dot6': + targetDot = dot5; + break; + } + + if (!checkDotTolerance(targetDot, x, y)) { + alert('Please follow rules and draw accordingly. Try again!'); + return; // Do not start drawing if not within tolerance of target dot + } + + ctx.clearRect(0, 0, canvas.width, canvas.height); + drawToleranceCircle(targetDot, ctx); + + isDrawing = true; + startX = targetDot.offsetLeft + 5; + startY = targetDot.offsetTop + 5; +} + + +function draw(e) { + if (!isDrawing) return; + const rect = canvas.getBoundingClientRect(); + const x = e.clientX - rect.left; + const y = e.clientY - rect.top; + ctx.beginPath(); + ctx.moveTo(startX, startY); + ctx.lineTo(x, y); + ctx.stroke(); + startX = x; + startY = y; + ctx.strokeStyle = 'black'; // Change line color to black + ctx.lineWidth = 6; +} + +function stopDrawing(e) { + if (!isDrawing) return; + const rect = canvas.getBoundingClientRect(); + const x = e.clientX - rect.left; + const y = e.clientY - rect.top; + let targetDot; + + switch (nextConnection) { + case 'dot3-dot1': + targetDot = dot1; + break; + case 'dot2-dot4': + targetDot = dot4; + break; + case 'dot5-dot6': + targetDot = dot6; + break; + } + + if (checkDotTolerance(targetDot, x, y)) { + console.log('Stopped drawing near', targetDot.id); + let strokeId; + switch (nextConnection) { + case 'dot3-dot1': + strokeId = '1'; + nextConnection = 'dot2-dot4'; + arrow1.style.display = 'none'; + arrow2.style.display = 'block'; + dot2.style.zIndex = 4; // Bring dot4 to front + break; + case 'dot2-dot4': + strokeId = '2'; + nextConnection = 'dot5-dot6'; + dot2.style.zIndex = 0; // Reset dot2 z-index + arrow2.style.display = 'none'; + arrow3.style.display = 'block'; + dot5.style.zIndex = 4; // Bring dot5 to front + + break; + case 'dot5-dot6': + strokeId = '3'; + dot5.style.zIndex = 0; // Reset dot5 z-index + arrow3.style.display = 'none'; + dot6.style.display = 'none'; // Bring dot6 to front + button.style.display = 'block'; // Show the button + congrats.style.display = 'block'; // Show the congrats message + // Optionally loop back or end the sequence + // In this case, you may want to reset the connections, e.g., nextConnection = 'dot3-dot1'; + break; + } + + if (strokeId) { + document.getElementById('stroke' + strokeId).style.display = 'block'; + } + ctx.clearRect(0, 0, canvas.width, canvas.height); + } else { + alert('Complete the line near the correct dot. Try Again!'); + ctx.clearRect(0, 0, canvas.width, canvas.height); // Clear the canvas + } + isDrawing = false; +} + +canvas.addEventListener('mousedown', startDrawing); +canvas.addEventListener('mousemove', draw); +canvas.addEventListener('mouseup', stopDrawing); \ No newline at end of file diff --git a/experiment/simulation/LettersPage/SmaK/k.png b/experiment/simulation/LettersPage/SmaK/k.png new file mode 100644 index 0000000..d7db5e3 Binary files /dev/null and b/experiment/simulation/LettersPage/SmaK/k.png differ diff --git a/experiment/simulation/LettersPage/SmaK/main.css b/experiment/simulation/LettersPage/SmaK/main.css new file mode 100644 index 0000000..7f58f3f --- /dev/null +++ b/experiment/simulation/LettersPage/SmaK/main.css @@ -0,0 +1,105 @@ +* { + margin: 0; + padding: 0; + font-family: Arial, Helvetica, sans-serif; + box-sizing: border-box; /* Ensures padding and border are included in width/height calculations */ + z-index: -4; +} + +.simulation-container { + background-color: rgba(220, 229, 236, 1); + width: 100%; /* Responsive width */ + max-width: 1000px; /* Max width to maintain design integrity */ + min-height: 800px; /* Minimum height */ + margin: 20px auto; /* Auto margins for centering */ + z-index: 0; + display: grid; + justify-items: center; + +} + +.title { + margin: 0; + padding: 5px; + letter-spacing: 0.1em; + background-color: rgb(0, 140, 255); + color: white; + display: flex; + justify-content: center; + width: 100%; /* Ensure it fills the container */ + height: 60%; +} + +.instruction-main { + position: relative; + display: grid; + justify-content: center; + z-index: 0; + font-family: Georgia, 'Times New Roman', Times, serif; + height: 10%; + bottom: 40%; + font-size: 50px; + margin-top: 20px; +} + +.instruction-main1 { + position: relative; + display: grid; + justify-content: center; + z-index: 0; + bottom: 100%; + height: 10%; + + +} + +.rules { + position: relative; + display: flex; + justify-content: start; + z-index: 0; + + height: 10%; + bottom: 45px; + font-size: 150%; + left: -40%; +} + +.rule { + position: relative; + display: flex; + justify-content: start; + z-index: 0; + font-family: Georgia, 'Times New Roman', Times, serif; + + + left: -100px; + bottom: 80px; + +} + +.congrats { + position: relative; + display: none; + justify-content: start; + z-index: 0; + height: 10%; + top: 80%; + font-size: 150%; + +} + +.next-exp { + position: absolute; + display: none; + left: 75%; + transform: translateX(-50%); /* Centering button horizontally */ + padding: 10px 15px; + color: white; + background-color: rgb(20, 117, 228); + font-weight: 600; + border: none; + border-radius: 4px; + cursor: pointer; + bottom: 30px; +} \ No newline at end of file diff --git a/experiment/simulation/LettersPage/SmaK/sboxx.png b/experiment/simulation/LettersPage/SmaK/sboxx.png new file mode 100644 index 0000000..bc30ae9 Binary files /dev/null and b/experiment/simulation/LettersPage/SmaK/sboxx.png differ diff --git a/experiment/simulation/LettersPage/SmaK/stroke1.png b/experiment/simulation/LettersPage/SmaK/stroke1.png new file mode 100644 index 0000000..3f06a3c Binary files /dev/null and b/experiment/simulation/LettersPage/SmaK/stroke1.png differ diff --git a/experiment/simulation/LettersPage/SmaK/without-bg.gif b/experiment/simulation/LettersPage/SmaK/without-bg.gif new file mode 100644 index 0000000..455420f Binary files /dev/null and b/experiment/simulation/LettersPage/SmaK/without-bg.gif differ