diff --git a/experiment/simulation/LettersPage/SmaV/V.png b/experiment/simulation/LettersPage/SmaV/V.png new file mode 100644 index 0000000..dcfe67a Binary files /dev/null and b/experiment/simulation/LettersPage/SmaV/V.png differ diff --git a/experiment/simulation/LettersPage/SmaV/W.png b/experiment/simulation/LettersPage/SmaV/W.png new file mode 100644 index 0000000..9d0ce0a Binary files /dev/null and b/experiment/simulation/LettersPage/SmaV/W.png differ diff --git a/experiment/simulation/LettersPage/SmaV/index.html b/experiment/simulation/LettersPage/SmaV/index.html new file mode 100644 index 0000000..5f52f7d --- /dev/null +++ b/experiment/simulation/LettersPage/SmaV/index.html @@ -0,0 +1,313 @@ + + + + + + + Connect Dots + + + + + +
+ +
+ +
+
+ + + Overlay Image + Overlay Image + + + + +
+ + + + + \ No newline at end of file diff --git a/experiment/simulation/LettersPage/SmaV/main.css b/experiment/simulation/LettersPage/SmaV/main.css new file mode 100644 index 0000000..7f58f3f --- /dev/null +++ b/experiment/simulation/LettersPage/SmaV/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/SmaV/sboxx.png b/experiment/simulation/LettersPage/SmaV/sboxx.png new file mode 100644 index 0000000..bc30ae9 Binary files /dev/null and b/experiment/simulation/LettersPage/SmaV/sboxx.png differ diff --git a/experiment/simulation/LettersPage/SmaV/stroke1.png b/experiment/simulation/LettersPage/SmaV/stroke1.png new file mode 100644 index 0000000..3f06a3c Binary files /dev/null and b/experiment/simulation/LettersPage/SmaV/stroke1.png differ diff --git a/experiment/simulation/LettersPage/SmaV/v-new.png b/experiment/simulation/LettersPage/SmaV/v-new.png new file mode 100644 index 0000000..ec678c6 Binary files /dev/null and b/experiment/simulation/LettersPage/SmaV/v-new.png differ diff --git a/experiment/simulation/LettersPage/SmaV/v.css b/experiment/simulation/LettersPage/SmaV/v.css new file mode 100644 index 0000000..a0e1b22 --- /dev/null +++ b/experiment/simulation/LettersPage/SmaV/v.css @@ -0,0 +1,152 @@ +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: 75px; + left: 132px; + width: 15px; + height: 250px; + transform: rotate(157deg); + + +} + +#stroke2 { + display: none; + position: absolute; + top: 75px; + left: 220px; + width: 15px; + height: 250px; + transform: rotate(203deg); + z-index: -1; + +} + +#stroke3 { + + display: none; + position: absolute; + top: 75px; + left: 235px; + width: 15px; + height: 250px; + transform: rotate(162deg); + +} + +#stroke4 { + + display: none; + position: absolute; + top: 73px; + left: 307px; + width: 15px; + height: 250px; + transform: rotate(197deg); + +} + +#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: 90px; + width: 40px; + height: 240px; + transform: rotate(162deg); + z-index: 0; +} + +.arrrow2 { + + top: 80px; + left: 270px; + position: absolute; + transform: rotate(20deg); + z-index: 0; + width: 40px; + height: 240px; + z-index: -2; +} + +.arrrow3 { + + position: absolute; + transform: rotate(162deg); + z-index: 0; + top: 70px; + left: 240px; + width: 30px; + height: 170px; +} + +.arrrow4 { + + position: absolute; + top: 80px; + left: 330px; + width: 30px; + height: 200px; + transform: rotate(18deg); + z-index: 0; +} \ No newline at end of file diff --git a/experiment/simulation/LettersPage/SmaV/v.html b/experiment/simulation/LettersPage/SmaV/v.html new file mode 100644 index 0000000..e491cac --- /dev/null +++ b/experiment/simulation/LettersPage/SmaV/v.html @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + Virtual Labs + + + + + +
+ +

Lettering

+

Letter v

+ +

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 v

+ + + + + +
+ + + + + + + \ No newline at end of file diff --git a/experiment/simulation/LettersPage/SmaV/v.js b/experiment/simulation/LettersPage/SmaV/v.js new file mode 100644 index 0000000..5d09704 --- /dev/null +++ b/experiment/simulation/LettersPage/SmaV/v.js @@ -0,0 +1,128 @@ +const canvas = document.getElementById('canvas'); +const ctx = canvas.getContext('2d'); +const dot1 = document.getElementById('dot1'); +const dot2 = document.getElementById('dot2'); +const dot3 = document.getElementById('dot3'); +const dot5 = document.getElementById('dot5'); +const dot6 = document.getElementById('dot6'); +const arrow1 = document.getElementById('arrow1'); +const arrow2 = document.getElementById('arrow2'); + + +let isDrawing = false; +let startX = 0; +let startY = 0; +let tolerance = 30; +let nextConnection = 'dot3-dot1'; // Start with connecting dot3 to dot1 + +arrow1.style.display = 'block'; // Initially, arrow1 is visible +arrow2.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)'; + 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 'dot1-dot5': + targetDot = dot1; + break; + } + + if (!checkDotTolerance(targetDot, x, y)) { + alert('Please follow rules and draw accordingly. Try again!'); + return; + } + + ctx.clearRect(0, 0, canvas.width, canvas.height); + drawToleranceCircle(targetDot, ctx); + drawToleranceCircle(nextConnection.includes('dot3') ? dot3 : dot1, 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'; + 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 'dot1-dot5': + targetDot = dot5; + break; + } + + if (checkDotTolerance(targetDot, x, y)) { + console.log('Stopped drawing near', targetDot.id); + let strokeId; + switch (nextConnection) { + case 'dot3-dot1': + strokeId = '1'; + nextConnection = 'dot1-dot5'; + arrow1.style.display = 'none'; + arrow2.style.display = 'block'; + dot3.style.display = 'none'; + break; + case 'dot1-dot5': + strokeId = '2'; + arrow2.style.display = 'none'; + dot5.style.display = 'none'; + button.style.display = 'block'; + congrats.style.display = 'block'; + // 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); + } + 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/SmaV/without-bg.gif b/experiment/simulation/LettersPage/SmaV/without-bg.gif new file mode 100644 index 0000000..455420f Binary files /dev/null and b/experiment/simulation/LettersPage/SmaV/without-bg.gif differ