diff --git a/experiment/simulation/LettersPage/SmaR/curved arrow.gif b/experiment/simulation/LettersPage/SmaR/curved arrow.gif new file mode 100644 index 0000000..1e1a94c Binary files /dev/null and b/experiment/simulation/LettersPage/SmaR/curved arrow.gif differ diff --git a/experiment/simulation/LettersPage/SmaR/index.html b/experiment/simulation/LettersPage/SmaR/index.html new file mode 100644 index 0000000..3f22a4d --- /dev/null +++ b/experiment/simulation/LettersPage/SmaR/index.html @@ -0,0 +1,247 @@ + + + + + + + Connect Dots + + + + + +
+ +
+
+
+ + + Overlay Image + Overlay Image + + + + +
+ + + + + \ No newline at end of file diff --git a/experiment/simulation/LettersPage/SmaR/main.css b/experiment/simulation/LettersPage/SmaR/main.css new file mode 100644 index 0000000..7f58f3f --- /dev/null +++ b/experiment/simulation/LettersPage/SmaR/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/SmaR/r-new.png b/experiment/simulation/LettersPage/SmaR/r-new.png new file mode 100644 index 0000000..6439d3f Binary files /dev/null and b/experiment/simulation/LettersPage/SmaR/r-new.png differ diff --git a/experiment/simulation/LettersPage/SmaR/r-strokee.png b/experiment/simulation/LettersPage/SmaR/r-strokee.png new file mode 100644 index 0000000..e305d91 Binary files /dev/null and b/experiment/simulation/LettersPage/SmaR/r-strokee.png differ diff --git a/experiment/simulation/LettersPage/SmaR/r.css b/experiment/simulation/LettersPage/SmaR/r.css new file mode 100644 index 0000000..3829a8a --- /dev/null +++ b/experiment/simulation/LettersPage/SmaR/r.css @@ -0,0 +1,118 @@ +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: 90px; + left: 94px; + width: 11px; + height: 225px; + z-index: -1; + + +} + +#stroke2 { + display: none; + position: absolute; + top: 90px; + left: 95px; + width: 140px; + height: 90px; + transform: rotate(10deg); + +} + +#stroke3 { + + display: none; + position: absolute; + top: 187px; + left: 140px; + width: 170px; + height: 132px; + +} +#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: 120px; + left: 40px; + width: 40px; + height: 130px; + transform: rotate(180deg); + z-index: -1; +} +.arrrow2 { + display: none; + position: absolute; + top: 110px; + left: 130px; + width: 50px; + height: 100px; + transform: rotate(250deg) scalex(1); + z-index: -1; +} +.arrrow3 { + display: none; + position: absolute; + top: 200px; + left: 310px; + width: 20px; + height: 110px; + transform: rotate(180deg); + z-index: 0; +} \ No newline at end of file diff --git a/experiment/simulation/LettersPage/SmaR/r.html b/experiment/simulation/LettersPage/SmaR/r.html new file mode 100644 index 0000000..0926817 --- /dev/null +++ b/experiment/simulation/LettersPage/SmaR/r.html @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + Virtual Labs + + + + + +
+ +

Lettering

+

Letter r

+ +

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 + + + + +
+ +

Congrats you have learnt to draw Letter r

+ + + + + +
+ + + + + + + \ No newline at end of file diff --git a/experiment/simulation/LettersPage/SmaR/r.js b/experiment/simulation/LettersPage/SmaR/r.js new file mode 100644 index 0000000..e6bc218 --- /dev/null +++ b/experiment/simulation/LettersPage/SmaR/r.js @@ -0,0 +1,98 @@ +const canvas = document.getElementById('canvas'); +const ctx = canvas.getContext('2d'); +const dot3 = document.getElementById('dot3'); +const dot4 = document.getElementById('dot4'); +const dot1 = document.getElementById('dot1'); +const arrow1 = document.getElementById('arrow1'); +const arrow2 = document.getElementById('arrow2'); + +let isDrawing = false; +let startX = 0; +let startY = 0; +let tolerance = 30; // Tolerance radius for dot connection +let nextConnection = 'dot3-dot4'; // Start with connecting dot3 to dot4 + +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 expectedDot; + + if (nextConnection === 'dot3-dot4') { + expectedDot = dot3; + } else if (nextConnection === 'dot4-dot1') { + expectedDot = dot4; + } else { + return; + } + + ctx.clearRect(0, 0, canvas.width, canvas.height); + drawToleranceCircle(expectedDot, ctx); + + if (Math.hypot(x - (expectedDot.offsetLeft + 5), y - (expectedDot.offsetTop + 5)) > tolerance) { + alert('Please follow rules and draw accordingly'); + return; + } + + isDrawing = true; + startX = expectedDot.offsetLeft + 5; + startY = expectedDot.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; + + if (nextConnection === 'dot3-dot4' && Math.hypot(x - (dot4.offsetLeft + 5), y - (dot4.offsetTop + 5)) <= tolerance) { + document.getElementById('stroke1').style.display = 'block'; + console.log('Stopped drawing near', dot4.id); + nextConnection = 'dot4-dot1'; + arrow1.style.display = 'none'; // Hide the first arrow + arrow2.style.display = 'block'; // Show the second arrow + dot3.style.display = 'none'; // Hide the first dot + + ctx.clearRect(0, 0, canvas.width, canvas.height); + } else if (nextConnection === 'dot4-dot1' && Math.hypot(x - (dot1.offsetLeft + 5), y - (dot1.offsetTop + 5)) <= tolerance) { + document.getElementById('stroke2').style.display = 'block'; + console.log('Stopped drawing near', dot1.id); + arrow2.style.display = 'none'; // Hide the arrow + dot4.style.display = 'none'; // Hide the second dot + dot1.style.display = 'none'; // Hide the third dot + button.style.display = 'block'; // Show the button + congrats.style.display = 'block'; // Show the congrats message + nextConnection = ''; // All connections done + ctx.clearRect(0, 0, canvas.width, canvas.height); + } else { + alert('Complete the line. 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/SmaR/sboxx.png b/experiment/simulation/LettersPage/SmaR/sboxx.png new file mode 100644 index 0000000..bc30ae9 Binary files /dev/null and b/experiment/simulation/LettersPage/SmaR/sboxx.png differ diff --git a/experiment/simulation/LettersPage/SmaR/stroke1.png b/experiment/simulation/LettersPage/SmaR/stroke1.png new file mode 100644 index 0000000..3f06a3c Binary files /dev/null and b/experiment/simulation/LettersPage/SmaR/stroke1.png differ diff --git a/experiment/simulation/LettersPage/SmaR/without-bg.gif b/experiment/simulation/LettersPage/SmaR/without-bg.gif new file mode 100644 index 0000000..455420f Binary files /dev/null and b/experiment/simulation/LettersPage/SmaR/without-bg.gif differ