Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c0c552e1d4 | |||
| 25033ca05d | |||
| 0e30ae36d2 | |||
| 533a9b71bb | |||
| deda6ebd18 | |||
| fbbc3ccbc2 | |||
| 2f82b4615f | |||
| dcb279d40c | |||
| 4e05df9c06 |
169
4-11.html
Normal file
169
4-11.html
Normal file
@@ -0,0 +1,169 @@
|
||||
<!--
|
||||
This work is licensed under CC BY-NC-ND 4.0
|
||||
Link to license: http://creativecommons.org/licenses/by-nc-nd/4.0/
|
||||
Attribute to Russell Georgi
|
||||
-->
|
||||
<html>
|
||||
<head>
|
||||
<title>
|
||||
Problem 4-11
|
||||
</title>
|
||||
<style>
|
||||
html, body {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
margin: 0px;
|
||||
border: 0;
|
||||
overflow: hidden;
|
||||
display: block;
|
||||
}
|
||||
|
||||
canvas {
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
|
||||
.dropbtn {
|
||||
background-color: #04AA6D;
|
||||
color: white;
|
||||
padding: 16px;
|
||||
font-size: 16px;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.dropdown {
|
||||
position: absolute;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.dropdown-content {
|
||||
display: none;
|
||||
position: relative;
|
||||
background-color: #f1f1f1;
|
||||
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.dropdown-content button {
|
||||
color: black;
|
||||
padding: 12px 16px;
|
||||
width: 100px;
|
||||
text-decoration: none;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.dropdown-content a:hover {background-color: #ddd;}
|
||||
|
||||
.dropdown:hover .dropdown-content {display: block;}
|
||||
|
||||
.dropdown:hover .dropbtn {background-color: #3e8e41;}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<canvas id="myCanvas" width="1" height="1" style="border:1px solid #ffffff;">
|
||||
Your browser does not support the HTML5 canvas tag.</canvas>
|
||||
|
||||
<script>
|
||||
var c = document.getElementById("myCanvas");
|
||||
var ctx = c.getContext("2d");
|
||||
ctx.canvas.width = window.innerWidth;
|
||||
ctx.canvas.height = window.innerHeight;
|
||||
|
||||
var w = 1;
|
||||
var wd = 1;
|
||||
var fd = 20;
|
||||
var m = 1;
|
||||
var t = 0;
|
||||
var dt = 0.1;
|
||||
var xPos = 0;
|
||||
var yPos = 0;
|
||||
|
||||
|
||||
ctx.translate(ctx.canvas.width / 2, ctx.canvas.height / 2);
|
||||
ctx.scale(1.5, 1.5);
|
||||
|
||||
|
||||
function Clear(ctx)
|
||||
{
|
||||
ctx.clearRect(-c.width, -c.height, c.width * 2, c.height * 2);
|
||||
}
|
||||
|
||||
function Update()
|
||||
{
|
||||
Clear(ctx);
|
||||
Draw();
|
||||
t += dt;
|
||||
|
||||
setTimeout(Update, 1000/60)
|
||||
}
|
||||
|
||||
function Draw()
|
||||
{
|
||||
ctx.beginPath();
|
||||
ctx.arc(xPos, yPos, 100, 0, Math.PI * 2);
|
||||
ctx.stroke();
|
||||
var x1 = -fd * (2 * w * w - wd * wd) * Math.cos(wd * t) /
|
||||
(wd * wd * (4 * w * w - wd * wd) * m);
|
||||
var y1 = Math.sqrt(10000 - x1 * x1);
|
||||
var t1 = Math.atan(y1 / x1);
|
||||
var x2 = -fd * 2 * Math.cos(wd * t) /
|
||||
(wd * wd * (4 * w * w - wd * wd) * m);
|
||||
var y2 = -Math.sqrt(10000 - x2 * x2);
|
||||
var t2 = Math.atan(y2 / x2);
|
||||
|
||||
if (x1 < 0 || y1 < 0)
|
||||
{
|
||||
t1 += Math.PI;
|
||||
}
|
||||
if (x2 < 0)
|
||||
{
|
||||
t2 -= Math.PI;
|
||||
}
|
||||
ctx.beginPath();
|
||||
ctx.arc(xPos + x1, yPos + y1, 10, 0, Math.PI * 2);
|
||||
ctx.fill();
|
||||
ctx.beginPath();
|
||||
ctx.arc(xPos + x2, yPos + y2, 10, 0, Math.PI * 2);
|
||||
ctx.fill();
|
||||
drawSpring(1, 3, Math.abs(t2 - t1), -10, 20, Math.min(t1, t2) - Math.PI / 2 + 0.2, 105, 0.1, xPos, yPos);
|
||||
drawSpring(1, 3, Math.PI * 2 - Math.abs(t2 - t1) -0.1, -10, 20, Math.max(t1, t2) - Math.PI / 2 + 0.2, 105, 0.1, xPos, yPos);
|
||||
}
|
||||
|
||||
function drawSpring(a, b, tSize, rSize, numLoops, t, r, pStep, x, y)
|
||||
{
|
||||
var pStart = Math.PI / 2;
|
||||
var pEnd = (3 * Math.PI / 2) + (2 * Math.PI * numLoops);
|
||||
var tEnd = a * pEnd - b * Math.sin(pEnd);
|
||||
var rEnd = a + b;
|
||||
var tFactor = tSize / tEnd;
|
||||
var rFactor = rSize / rEnd;
|
||||
var tShift = t - a * (Math.PI / 2) + b * Math.sin(Math.PI / 2);
|
||||
var rShift = r - a + b * Math.cos(Math.PI / 2);
|
||||
for (p = pStart; p <= pEnd; p += pStep)
|
||||
{
|
||||
var theta = tShift + tFactor * (a * p - b * Math.sin(p));
|
||||
var radius = rShift + rFactor * (a - b * Math.cos(p));
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(x + radius * Math.cos(theta), y + radius * Math.sin(theta));
|
||||
theta = tShift + tFactor * (a * (p + pStep) - b * Math.sin((p + pStep)));
|
||||
radius = rShift + rFactor * (a - b * Math.cos(p + pStep));
|
||||
ctx.lineTo(x + radius * Math.cos(theta), y + radius * Math.sin(theta));
|
||||
ctx.stroke();
|
||||
}
|
||||
}
|
||||
|
||||
window.addEventListener('resize', function(event) {
|
||||
c.width = window.innerWidth;
|
||||
c.height = window.innerHeight;
|
||||
ctx.translate(c.width / 2, c.height / 2);
|
||||
ctx.scale(1.5, 1.5);
|
||||
}, true);
|
||||
|
||||
Update();
|
||||
|
||||
</script>
|
||||
</body>
|
||||
<p xmlns:cc="http://creativecommons.org/ns#" style="font-size: 1vw; bottom: 0px; position: absolute;">
|
||||
This work is licensed under
|
||||
<a href="http://creativecommons.org/licenses/by-nc-nd/4.0/?ref=chooser-v1" target="_blank" rel="license noopener noreferrer" style="display:inline-block;">CC BY-NC-ND 4.0<img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/nc.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/nd.svg?ref=chooser-v1"></a></p>
|
||||
</html>
|
||||
271
4-12.html
Normal file
271
4-12.html
Normal file
@@ -0,0 +1,271 @@
|
||||
<!--
|
||||
This work is licensed under CC BY-NC-ND 4.0
|
||||
Link to license: http://creativecommons.org/licenses/by-nc-nd/4.0/
|
||||
Attribute to Russell Georgi
|
||||
-->
|
||||
<html>
|
||||
<head>
|
||||
<title>
|
||||
Problem 4-12
|
||||
</title>
|
||||
<style>
|
||||
html, body {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
margin: 0px;
|
||||
border: 0;
|
||||
overflow: hidden;
|
||||
display: block;
|
||||
}
|
||||
|
||||
canvas {
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
|
||||
.dropbtn {
|
||||
background-color: #04AA6D;
|
||||
color: white;
|
||||
padding: 16px;
|
||||
font-size: 16px;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.dropbtnm {
|
||||
background-color: #04AA6D;
|
||||
color: white;
|
||||
padding: 16px;
|
||||
font-size: 16px;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.dropdown {
|
||||
position: absolute;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.dropdown-content {
|
||||
display: none;
|
||||
position: relative;
|
||||
background-color: #f1f1f1;
|
||||
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.dropdown-content button {
|
||||
color: black;
|
||||
padding: 12px 16px;
|
||||
width: 100px;
|
||||
text-decoration: none;
|
||||
display: block;
|
||||
}
|
||||
|
||||
#m {
|
||||
left: 110px;
|
||||
}
|
||||
|
||||
.dropdown-content a:hover {background-color: #ddd;}
|
||||
|
||||
.dropdown:hover .dropdown-content {display: block;}
|
||||
|
||||
.dropdown:hover .dropbtn {background-color: #3e8e41;}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<canvas id="myCanvas" width="1" height="1" style="border:1px solid #ffffff;">
|
||||
Your browser does not support the HTML5 canvas tag.</canvas>
|
||||
<div class="dropdown">
|
||||
<button class="dropbtn" id="btn">2 Masses</button>
|
||||
<div class="dropdown-content">
|
||||
<button onclick="num(2)">2 Masses</button>
|
||||
<button onclick="num(3)">3 Masses</button>
|
||||
<button onclick="num(4)">4 Masses</button>
|
||||
<button onclick="num(5)">5 Masses</button>
|
||||
<button onclick="num(6)">6 Masses</button>
|
||||
<button onclick="num(7)">7 Masses</button>
|
||||
<button onclick="num(8)">8 Masses</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="dropdown" id="m">
|
||||
<button class="dropbtnm" id="btnm">Mode 1</button>
|
||||
<div class="dropdown-content">
|
||||
<button onclick="mum(1)" id="btn1">Mode 1</button>
|
||||
<button onclick="mum(2)" id="btn2">Mode 2</button>
|
||||
<button onclick="mum(3)" id="btn3">Mode 3</button>
|
||||
<button onclick="mum(4)" id="btn4">Mode 4</button>
|
||||
<button onclick="mum(5)" id="btn5">Mode 5</button>
|
||||
<button onclick="mum(6)" id="btn6">Mode 6</button>
|
||||
<button onclick="mum(7)" id="btn7">Mode 7</button>
|
||||
<button onclick="mum(8)" id="btn8">Mode 8</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var c = document.getElementById("myCanvas");
|
||||
var ctx = c.getContext("2d");
|
||||
ctx.canvas.width = window.innerWidth;
|
||||
ctx.canvas.height = window.innerHeight;
|
||||
|
||||
var w = 1;
|
||||
var amp = 0.8 / n;
|
||||
var n = 2;
|
||||
var m = 1;
|
||||
var t = 0;
|
||||
var dt = 0.1;
|
||||
var xPos = 0;
|
||||
var yPos = 0;
|
||||
|
||||
function num(nn)
|
||||
{
|
||||
n = nn;
|
||||
document.getElementById("btn").textContent = n.toString() + " Masses";
|
||||
if (m > n)
|
||||
{
|
||||
m = n;
|
||||
document.getElementById("btnm").textContent = "Mode " + m.toString();
|
||||
}
|
||||
}
|
||||
|
||||
function mum(mm)
|
||||
{
|
||||
m = mm;
|
||||
document.getElementById("btnm").textContent = "Mode " + m.toString();
|
||||
|
||||
}
|
||||
|
||||
ctx.translate(ctx.canvas.width / 2, ctx.canvas.height / 2);
|
||||
ctx.scale(1.5, 1.5);
|
||||
|
||||
|
||||
function Clear(ctx)
|
||||
{
|
||||
ctx.clearRect(-c.width, -c.height, c.width * 2, c.height * 2);
|
||||
}
|
||||
|
||||
function Update()
|
||||
{
|
||||
Clear(ctx);
|
||||
Draw();
|
||||
t += dt;
|
||||
amp = 0.8 / n;
|
||||
for (i = 1; i <= n; i++)
|
||||
{
|
||||
document.getElementById("btn" + i.toString()).style.visibility = "visible";
|
||||
}
|
||||
for (i = n + 1; i <= 8; i++)
|
||||
{
|
||||
document.getElementById("btn" + i.toString()).style.visibility = "hidden";
|
||||
}
|
||||
setTimeout(Update, 1000/60)
|
||||
}
|
||||
|
||||
function Draw()
|
||||
{
|
||||
ctx.beginPath();
|
||||
ctx.arc(xPos, yPos, 100, 0, Math.PI * 2);
|
||||
ctx.stroke();
|
||||
if (m % 2 == 0)
|
||||
{
|
||||
mn = Math.floor(m / 2);
|
||||
console.log("cos" + mn.toString());
|
||||
for (i = 0; i < n; i++)
|
||||
{
|
||||
if (2 * w * Math.sin(Math.PI * mn / n) > 0.0001)
|
||||
{
|
||||
var theta = Math.PI * 2 * i / n;
|
||||
theta += Math.cos(i * 2 * Math.PI * mn / n) * amp * Math.cos(2 * w * Math.sin(Math.PI * mn / n) * t);
|
||||
var theta2 = Math.PI * 2 * (i + 1) / n;
|
||||
theta2 += Math.cos((i+1) * 2 * Math.PI * mn / n) * amp * Math.cos(2 * w * Math.sin(Math.PI * mn / n) * t);
|
||||
ctx.beginPath();
|
||||
ctx.arc(xPos + 100 * Math.cos(theta), yPos + 100 * Math.sin(theta), 10, 0, Math.PI * 2);
|
||||
ctx.fill();
|
||||
connectTwoTheta(theta, theta2);
|
||||
} else
|
||||
{
|
||||
var theta = Math.PI * 2 * i / n;
|
||||
theta += Math.cos(i * 2 * Math.PI * mn / n) * amp * w * t;
|
||||
var theta2 = Math.PI * 2 * (i + 1) / n;
|
||||
theta2 += Math.cos((i+1) * 2 * Math.PI * mn / n) * amp * w * t;
|
||||
ctx.beginPath();
|
||||
ctx.arc(xPos + 100 * Math.cos(theta), yPos + 100 * Math.sin(theta), 10, 0, Math.PI * 2);
|
||||
ctx.fill();
|
||||
connectTwoTheta(theta, theta2);
|
||||
}
|
||||
}
|
||||
} else
|
||||
{
|
||||
mn = Math.floor(m / 2);
|
||||
console.log("sin" + mn.toString());
|
||||
for (i = 0; i < n; i++)
|
||||
{
|
||||
if (2 * w * Math.sin(Math.PI * mn / n) > 0.0001)
|
||||
{
|
||||
var theta = Math.PI * 2 * i / n;
|
||||
theta += Math.sin(i * 2 * Math.PI * mn / n) * amp * Math.cos(2 * w * Math.sin(Math.PI * mn / n) * t);
|
||||
var theta2 = Math.PI * 2 * (i + 1) / n;
|
||||
theta2 += Math.sin((i+1) * 2 * Math.PI * mn / n) * amp * Math.cos(2 * w * Math.sin(Math.PI * mn / n) * t);
|
||||
ctx.beginPath();
|
||||
ctx.arc(xPos + 100 * Math.cos(theta), yPos + 100 * Math.sin(theta), 10, 0, Math.PI * 2);
|
||||
ctx.fill();
|
||||
connectTwoTheta(theta, theta2);
|
||||
} else
|
||||
{
|
||||
var theta = Math.PI * 2 * i / n;
|
||||
theta += Math.cos(i * 2 * Math.PI * mn / n) * amp * w * t;
|
||||
var theta2 = Math.PI * 2 * (i + 1) / n;
|
||||
theta2 += Math.cos((i+1) * 2 * Math.PI * mn / n) * amp * w * t;
|
||||
ctx.beginPath();
|
||||
ctx.arc(xPos + 100 * Math.cos(theta), yPos + 100 * Math.sin(theta), 10, 0, Math.PI * 2);
|
||||
ctx.fill();
|
||||
connectTwoTheta(theta, theta2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function connectTwoTheta(theta1, theta2)
|
||||
{
|
||||
if (theta1 > theta2)
|
||||
{
|
||||
theta2 += Math.PI * 2;
|
||||
}
|
||||
drawSpring(1, 3, Math.abs(theta1 - theta2), -10, Math.ceil(50 / n), theta1, 105, 0.1, xPos, yPos);
|
||||
}
|
||||
|
||||
function drawSpring(a, b, tSize, rSize, numLoops, t, r, pStep, x, y)
|
||||
{
|
||||
var pStart = 0;
|
||||
var pEnd = (3 * Math.PI / 2) + (2 * Math.PI * numLoops);
|
||||
var tEnd = a * pEnd - b * Math.sin(pEnd);
|
||||
var rEnd = a + b;
|
||||
var tFactor = tSize / tEnd;
|
||||
var rFactor = rSize / rEnd;
|
||||
var tShift = t /*- a * (Math.PI / 2) + b * Math.sin(Math.PI / 2) - Math.PI/ 2*/;
|
||||
var rShift = r - a + b * Math.cos(Math.PI / 2);
|
||||
for (p = pStart; p <= pEnd; p += pStep)
|
||||
{
|
||||
var theta = tShift + tFactor * (a * p - b * Math.sin(p));
|
||||
var radius = rShift + rFactor * (a - b * Math.cos(p));
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(x + radius * Math.cos(theta), y + radius * Math.sin(theta));
|
||||
theta = tShift + tFactor * (a * (p + pStep) - b * Math.sin((p + pStep)));
|
||||
radius = rShift + rFactor * (a - b * Math.cos(p + pStep));
|
||||
ctx.lineTo(x + radius * Math.cos(theta), y + radius * Math.sin(theta));
|
||||
ctx.stroke();
|
||||
}
|
||||
}
|
||||
|
||||
window.addEventListener('resize', function(event) {
|
||||
c.width = window.innerWidth;
|
||||
c.height = window.innerHeight;
|
||||
ctx.translate(c.width / 2, c.height / 2);
|
||||
}, true);
|
||||
|
||||
Update();
|
||||
|
||||
</script>
|
||||
</body>
|
||||
<p xmlns:cc="http://creativecommons.org/ns#" style="font-size: 1vw; bottom: 0px; position: absolute;">
|
||||
This work is licensed under
|
||||
<a href="http://creativecommons.org/licenses/by-nc-nd/4.0/?ref=chooser-v1" target="_blank" rel="license noopener noreferrer" style="display:inline-block;">CC BY-NC-ND 4.0<img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/nc.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/nd.svg?ref=chooser-v1"></a></p>
|
||||
</html>
|
||||
172
4-9.html
Normal file
172
4-9.html
Normal file
@@ -0,0 +1,172 @@
|
||||
<!--
|
||||
This work is licensed under CC BY-NC-ND 4.0
|
||||
Link to license: http://creativecommons.org/licenses/by-nc-nd/4.0/
|
||||
Attribute to Russell Georgi
|
||||
-->
|
||||
<html>
|
||||
<head>
|
||||
<title>
|
||||
Problem 4-9
|
||||
</title>
|
||||
<style>
|
||||
html, body {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
margin: 0px;
|
||||
border: 0;
|
||||
overflow: hidden;
|
||||
display: block;
|
||||
}
|
||||
|
||||
canvas {
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
|
||||
.dropbtn {
|
||||
background-color: #04AA6D;
|
||||
color: white;
|
||||
padding: 16px;
|
||||
font-size: 16px;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.dropdown {
|
||||
position: absolute;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.dropdown-content {
|
||||
display: none;
|
||||
position: relative;
|
||||
background-color: #f1f1f1;
|
||||
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.dropdown-content button {
|
||||
color: black;
|
||||
padding: 12px 16px;
|
||||
width: 100px;
|
||||
text-decoration: none;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.dropdown-content a:hover {background-color: #ddd;}
|
||||
|
||||
.dropdown:hover .dropdown-content {display: block;}
|
||||
|
||||
.dropdown:hover .dropbtn {background-color: #3e8e41;}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<canvas id="myCanvas" width="1" height="1" style="border:1px solid #ffffff;">
|
||||
Your browser does not support the HTML5 canvas tag.</canvas>
|
||||
<div class="dropdown">
|
||||
<button class="dropbtn" id="btn">Mode 1</button>
|
||||
<div class="dropdown-content">
|
||||
<button onclick="num(0)">Mode 1</button>
|
||||
<button onclick="num(1)">Mode 2</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var c = document.getElementById("myCanvas");
|
||||
var ctx = c.getContext("2d");
|
||||
ctx.canvas.width = window.innerWidth;
|
||||
ctx.canvas.height = window.innerHeight;
|
||||
|
||||
var w = 1;
|
||||
var amp = 20;
|
||||
var mode = 0;
|
||||
var t = 0;
|
||||
var dt = 0.1;
|
||||
var xPos = 0;
|
||||
var yPos = 0;
|
||||
|
||||
function num(n)
|
||||
{
|
||||
mode = n;
|
||||
}
|
||||
|
||||
|
||||
ctx.translate(ctx.canvas.width / 2, ctx.canvas.height / 2);
|
||||
ctx.scale(1.5, 1.5);
|
||||
|
||||
|
||||
function Clear(ctx)
|
||||
{
|
||||
ctx.clearRect(-c.width, -c.height, c.width * 2, c.height * 2);
|
||||
}
|
||||
|
||||
function Update()
|
||||
{
|
||||
Draw();
|
||||
t += dt;
|
||||
setTimeout(Update, 1000/60)
|
||||
}
|
||||
|
||||
function Draw()
|
||||
{
|
||||
if (mode == 0)
|
||||
{
|
||||
Clear(ctx);
|
||||
ctx.beginPath();
|
||||
ctx.arc(xPos + 50 + amp * Math.sin(w * t), yPos, 5, 0, Math.PI * 2);
|
||||
ctx.fill();
|
||||
ctx.beginPath();
|
||||
ctx.arc(xPos - 50 + amp * (Math.sqrt(3) - 1) * Math.sin(w * t) / 2, yPos, 5 * Math.sqrt(2), 0, Math.PI * 2);
|
||||
ctx.fill();
|
||||
drawSpring(1, 3, 100 + amp * (Math.sqrt(3) - 1) * Math.sin(w * t) / 2, 10, 5, xPos - 150, yPos, 0.1, 0);
|
||||
drawSpring(1, 3, 100 - amp * (Math.sqrt(3) - 1) * Math.sin(w * t) / 2+ amp * Math.sin(w * t), 10, 5, xPos - 50 + amp * (Math.sqrt(3) - 1) * Math.sin(w * t) / 2, yPos, 0.1, 0);
|
||||
drawSpring(1, 3, 100 - amp * Math.sin(w * t) , 10, 5, xPos + 50 + amp * Math.sin(w * t), yPos, 0.1, 0);
|
||||
} else if (mode == 1)
|
||||
{
|
||||
Clear(ctx);
|
||||
ctx.beginPath();
|
||||
ctx.arc(xPos + 50 + amp * Math.sin(w * t), yPos, 5, 0, Math.PI * 2);
|
||||
ctx.fill();
|
||||
ctx.beginPath();
|
||||
ctx.arc(xPos - 50 + amp * (-Math.sqrt(3) - 1) * Math.sin(w * t) / 2, yPos, 5 * Math.sqrt(2), 0, Math.PI * 2);
|
||||
ctx.fill();
|
||||
drawSpring(1, 3, 100 + amp * (-Math.sqrt(3) - 1) * Math.sin(w * t) / 2, 10, 5, xPos - 150, yPos, 0.1, 0);
|
||||
drawSpring(1, 3, 100 - amp * (-Math.sqrt(3) - 1) * Math.sin(w * t) / 2+ amp * Math.sin(w * t), 10, 5, xPos - 50 + amp * (-Math.sqrt(3) - 1) * Math.sin(w * t) / 2, yPos, 0.1, 0);
|
||||
drawSpring(1, 3, 100 - amp * Math.sin(w * t) , 10, 5, xPos + 50 + amp * Math.sin(w * t), yPos, 0.1, 0);
|
||||
}
|
||||
}
|
||||
|
||||
function drawSpring(a, b, xSize, ySize, numLoops, x, y, tStep, deltaY)
|
||||
{
|
||||
var tStart = Math.PI / 2;
|
||||
var tEnd = (3 * Math.PI / 2) + (2 * Math.PI * numLoops);
|
||||
var xEnd = a * tEnd - b * Math.sin(tEnd);
|
||||
var yEnd = a + b;
|
||||
var xFactor = xSize / xEnd;
|
||||
var yFactor = ySize / yEnd;
|
||||
var xShift = x - a * (Math.PI / 2) + b * Math.sin(Math.PI / 2);
|
||||
var yShift = y - a + b * Math.cos(Math.PI / 2);
|
||||
var slope = deltaY / xSize;
|
||||
for (p = tStart; p <= tEnd; p += tStep)
|
||||
{
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(xShift + xFactor * (a * p - b * Math.sin(p)), yShift + yFactor * (a - b * Math.cos(p)) + slope * (a * p - b * Math.sin(p)));
|
||||
ctx.lineTo(xShift + xFactor * (a * (p + tStep) - b * Math.sin(p + tStep)), yShift + yFactor * (a - b * Math.cos(p + tStep)));
|
||||
ctx.stroke();
|
||||
}
|
||||
}
|
||||
|
||||
window.addEventListener('resize', function(event) {
|
||||
c.width = window.innerWidth;
|
||||
c.height = window.innerHeight;
|
||||
ctx.translate(c.width / 2, c.height / 2);
|
||||
ctx.scale(1.5, 1.5);
|
||||
}, true);
|
||||
|
||||
Update();
|
||||
|
||||
</script>
|
||||
</body>
|
||||
<p xmlns:cc="http://creativecommons.org/ns#" style="font-size: 1vw; bottom: 0px; position: absolute;">
|
||||
This work is licensed under
|
||||
<a href="http://creativecommons.org/licenses/by-nc-nd/4.0/?ref=chooser-v1" target="_blank" rel="license noopener noreferrer" style="display:inline-block;">CC BY-NC-ND 4.0<img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/nc.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/nd.svg?ref=chooser-v1"></a></p>
|
||||
</html>
|
||||
221
5-15and5-16.html
Normal file
221
5-15and5-16.html
Normal file
@@ -0,0 +1,221 @@
|
||||
<!--
|
||||
This work is licensed under CC BY-NC-ND 4.0
|
||||
Link to license: http://creativecommons.org/licenses/by-nc-nd/4.0/
|
||||
Attribute to Russell Georgi
|
||||
-->
|
||||
<html>
|
||||
<head>
|
||||
<title>
|
||||
Problem 5-15
|
||||
</title>
|
||||
<style>
|
||||
html, body {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
margin: 0px;
|
||||
border: 0;
|
||||
overflow: hidden;
|
||||
display: block;
|
||||
}
|
||||
|
||||
canvas {
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
|
||||
.dropbtn {
|
||||
background-color: #04AA6D;
|
||||
color: white;
|
||||
padding: 16px;
|
||||
font-size: 16px;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.dropbtnm {
|
||||
background-color: #04AA6D;
|
||||
color: white;
|
||||
padding: 16px;
|
||||
font-size: 16px;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.dropdown {
|
||||
position: absolute;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.dropdown-content {
|
||||
display: none;
|
||||
position: relative;
|
||||
background-color: #f1f1f1;
|
||||
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.dropdown-content button {
|
||||
color: black;
|
||||
padding: 12px 16px;
|
||||
width: 100px;
|
||||
text-decoration: none;
|
||||
display: block;
|
||||
}
|
||||
|
||||
#m {
|
||||
left: 110px;
|
||||
}
|
||||
|
||||
.dropdown-content a:hover {background-color: #ddd;}
|
||||
|
||||
.dropdown:hover .dropdown-content {display: block;}
|
||||
|
||||
.dropdown:hover .dropbtn {background-color: #3e8e41;}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<canvas id="myCanvas" width="1" height="1" style="border:1px solid #ffffff;">
|
||||
Your browser does not support the HTML5 canvas tag.</canvas>
|
||||
|
||||
<script>
|
||||
var c = document.getElementById("myCanvas");
|
||||
var ctx = c.getContext("2d");
|
||||
ctx.canvas.width = window.innerWidth;
|
||||
ctx.canvas.height = window.innerHeight;
|
||||
|
||||
var m = 250;
|
||||
var s = 1;
|
||||
var u = 10;
|
||||
var t = 0;
|
||||
var w = 160;
|
||||
var h = 100;
|
||||
var x = 0;
|
||||
var x2 = 0;
|
||||
var sdt = 3;
|
||||
var st = 3;
|
||||
var sdt2 = 3;
|
||||
var st2 = 3;
|
||||
var sr = 5;
|
||||
var six = -100;
|
||||
var dist = 150;
|
||||
var snowballPositions = new Array();
|
||||
var snowballDirections = new Array();
|
||||
var snowballPositions2 = new Array();
|
||||
var snowballDirections2 = new Array();
|
||||
var dt = 0.1;
|
||||
var xPos = -200;
|
||||
var yPos = 100;
|
||||
|
||||
ctx.translate(ctx.canvas.width / 2, ctx.canvas.height / 2);
|
||||
ctx.scale(1.5, 1.5);
|
||||
|
||||
|
||||
function Clear(ctx)
|
||||
{
|
||||
ctx.clearRect(-c.width, -c.height, c.width * 2, c.height * 2);
|
||||
}
|
||||
|
||||
function Update()
|
||||
{
|
||||
Clear(ctx);
|
||||
Draw();
|
||||
Draw2();
|
||||
t += dt;
|
||||
st += dt;
|
||||
st2 += dt;
|
||||
x = calcX(t);
|
||||
x2 = calcX2(t);
|
||||
setTimeout(Update, 1000/60)
|
||||
}
|
||||
|
||||
function calcX(gt)
|
||||
{
|
||||
return u * gt - m * u * Math.log(1 + 2 * s * gt / m) / (2 * s);
|
||||
}
|
||||
|
||||
function Draw()
|
||||
{
|
||||
ctx.beginPath();
|
||||
ctx.rect(xPos + x - w / 2, yPos - h / 2, w, h);
|
||||
ctx.stroke();
|
||||
ctx.beginPath();
|
||||
ctx.arc(xPos + x - w / 4 - h/8, yPos + h / 2 + h / 8, h/8, 0, Math.PI * 2);
|
||||
ctx.stroke();
|
||||
ctx.beginPath();
|
||||
ctx.arc(xPos + x + w / 4 + h/8, yPos + h / 2 + h / 8, h/8, 0, Math.PI * 2);
|
||||
ctx.stroke();
|
||||
if (st > sdt)
|
||||
{
|
||||
st -= sdt;
|
||||
snowballPositions.push(six);
|
||||
snowballDirections.push(1);
|
||||
}
|
||||
for (i = 0; i < snowballPositions.length; i++)
|
||||
{
|
||||
if (snowballPositions[i] < x - w/2 - sr || snowballDirections[i] == -1)
|
||||
{
|
||||
snowballPositions[i] += u * dt * snowballDirections[i];
|
||||
} else
|
||||
{
|
||||
snowballDirections[i] = -1;
|
||||
}
|
||||
ctx.beginPath();
|
||||
ctx.arc(xPos + snowballPositions[i], yPos - h/4, sr, 0, Math.PI * 2);
|
||||
ctx.stroke();
|
||||
}
|
||||
}
|
||||
|
||||
function calcX2(gt)
|
||||
{
|
||||
return u * gt - m * u * Math.sqrt(1 + 2 * s * gt / m) / (s) + m * u / s;
|
||||
}
|
||||
|
||||
function Draw2()
|
||||
{
|
||||
ctx.beginPath();
|
||||
ctx.rect(xPos + x2 - w / 2, yPos - h / 2 - dist, w, h);
|
||||
ctx.stroke();
|
||||
ctx.beginPath();
|
||||
ctx.arc(xPos + x2 - w / 4 - h/8, yPos + h / 2 + h / 8 - dist, h/8, 0, Math.PI * 2);
|
||||
ctx.stroke();
|
||||
ctx.beginPath();
|
||||
ctx.arc(xPos + x2 + w / 4 + h/8, yPos + h / 2 + h / 8 - dist, h/8, 0, Math.PI * 2);
|
||||
ctx.stroke();
|
||||
if (st2 > sdt)
|
||||
{
|
||||
st2 -= sdt;
|
||||
snowballPositions2.push(six);
|
||||
snowballDirections2.push(1);
|
||||
}
|
||||
for (i = 0; i < snowballPositions2.length; i++)
|
||||
{
|
||||
y = -h/4;
|
||||
if (snowballPositions2[i] < x2 - w/2 - sr)
|
||||
{
|
||||
snowballPositions2[i] += u * dt * snowballDirections2[i];
|
||||
} else
|
||||
{
|
||||
snowballDirections2[i] = 0;
|
||||
nr = Math.floor(w / (2 * sr));
|
||||
snowballPositions2[i] = x2 - w/2 + sr + 2 * sr * (i % nr);
|
||||
y = h/2 - sr - 2 * sr * Math.floor(i / nr);
|
||||
}
|
||||
ctx.beginPath();
|
||||
ctx.arc(xPos + snowballPositions2[i], yPos + y - dist, sr, 0, Math.PI * 2);
|
||||
ctx.stroke();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
window.addEventListener('resize', function(event) {
|
||||
c.width = window.innerWidth;
|
||||
c.height = window.innerHeight;
|
||||
ctx.translate(c.width / 2, c.height / 2);
|
||||
}, true);
|
||||
|
||||
Update();
|
||||
|
||||
</script>
|
||||
</body>
|
||||
<p xmlns:cc="http://creativecommons.org/ns#" style="font-size: 1vw; bottom: 0px; position: absolute;">
|
||||
This work is licensed under
|
||||
<a href="http://creativecommons.org/licenses/by-nc-nd/4.0/?ref=chooser-v1" target="_blank" rel="license noopener noreferrer" style="display:inline-block;">CC BY-NC-ND 4.0<img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/nc.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/nd.svg?ref=chooser-v1"></a></p>
|
||||
</html>
|
||||
167
5-23.html
Normal file
167
5-23.html
Normal file
@@ -0,0 +1,167 @@
|
||||
<!--
|
||||
This work is licensed under CC BY-NC-ND 4.0
|
||||
Link to license: http://creativecommons.org/licenses/by-nc-nd/4.0/
|
||||
Attribute to Russell Georgi
|
||||
-->
|
||||
<html>
|
||||
<head>
|
||||
<title>
|
||||
Problem 5-23
|
||||
</title>
|
||||
<style>
|
||||
html, body {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
margin: 0px;
|
||||
border: 0;
|
||||
overflow: hidden;
|
||||
display: block;
|
||||
}
|
||||
|
||||
canvas {
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
|
||||
.dropbtn {
|
||||
background-color: #04AA6D;
|
||||
color: white;
|
||||
padding: 16px;
|
||||
font-size: 16px;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.dropbtnm {
|
||||
background-color: #04AA6D;
|
||||
color: white;
|
||||
padding: 16px;
|
||||
font-size: 16px;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.dropdown {
|
||||
position: absolute;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.dropdown-content {
|
||||
display: none;
|
||||
position: relative;
|
||||
background-color: #f1f1f1;
|
||||
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.dropdown-content button {
|
||||
color: black;
|
||||
padding: 12px 16px;
|
||||
width: 100px;
|
||||
text-decoration: none;
|
||||
display: block;
|
||||
}
|
||||
|
||||
#m {
|
||||
left: 110px;
|
||||
}
|
||||
|
||||
.dropdown-content a:hover {background-color: #ddd;}
|
||||
|
||||
.dropdown:hover .dropdown-content {display: block;}
|
||||
|
||||
.dropdown:hover .dropbtn {background-color: #3e8e41;}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<canvas id="myCanvas" width="1" height="1" style="border:1px solid #ffffff;">
|
||||
Your browser does not support the HTML5 canvas tag.</canvas>
|
||||
|
||||
<script>
|
||||
var c = document.getElementById("myCanvas");
|
||||
var ctx = c.getContext("2d");
|
||||
ctx.canvas.width = window.innerWidth;
|
||||
ctx.canvas.height = window.innerHeight;
|
||||
var n = 10;
|
||||
var g = 20;
|
||||
var h = 55;
|
||||
var r1 = 50;
|
||||
var rf = 0.25;
|
||||
var dr = 0.2;
|
||||
var drc = 0.1;
|
||||
var ballPositions = new Array(n);
|
||||
var ballVelocities = new Array(n);
|
||||
var t = 0;
|
||||
var dt = 0.025;
|
||||
var xPos = 0;
|
||||
var yPos = -200;
|
||||
|
||||
ctx.translate(ctx.canvas.width / 2, ctx.canvas.height / 2);
|
||||
ctx.scale(1.5, -1.5);
|
||||
ballPositions[0] = h;
|
||||
ballVelocities[0] = 0;
|
||||
for (i = 1; i < ballPositions.length; i++)
|
||||
{
|
||||
ballPositions[i] = ballPositions[i-1] + (rf ** (i-1)) * r1 + (rf ** i) * r1 + dr;
|
||||
ballVelocities[i] = 0;
|
||||
}
|
||||
|
||||
|
||||
function Clear(ctx)
|
||||
{
|
||||
ctx.clearRect(-c.width, -c.height, c.width * 2, c.height * 2);
|
||||
}
|
||||
|
||||
function Update()
|
||||
{
|
||||
Clear(ctx);
|
||||
Draw();
|
||||
t += dt;
|
||||
for (i = 0; i < ballPositions.length; i++)
|
||||
{
|
||||
ballVelocities[i] -= g * dt;
|
||||
ballPositions[i] += ballVelocities[i] * dt;
|
||||
}
|
||||
for (i = 0; i < ballPositions.length; i++)
|
||||
{
|
||||
if (i == 0 && ballPositions[i] - r1 < drc)
|
||||
{
|
||||
ballVelocities[i] = -ballVelocities[i];
|
||||
ballPositions[i] += ballVelocities[i] * dt;
|
||||
} else if (i != 0 && ballPositions[i] - r1 * (rf ** i) < ballPositions[i - 1] + r1 * (rf ** (i - 1)) + drc)
|
||||
{
|
||||
ballVelocities[i] = -ballVelocities[i] + 2 * ballVelocities[i - 1];
|
||||
ballPositions[i] += ballVelocities[i] * dt;
|
||||
}
|
||||
}
|
||||
setTimeout(Update, 1000/60)
|
||||
}
|
||||
|
||||
|
||||
function Draw()
|
||||
{
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(-c.width, yPos);
|
||||
ctx.lineTo(c.width, yPos);
|
||||
ctx.stroke();
|
||||
for (i = 0; i < ballPositions.length; i++)
|
||||
{
|
||||
ctx.beginPath();
|
||||
ctx.arc(0, ballPositions[i] + yPos, r1 * (rf ** i), 0, Math.PI * 2);
|
||||
ctx.stroke();
|
||||
}
|
||||
}
|
||||
|
||||
window.addEventListener('resize', function(event) {
|
||||
c.width = window.innerWidth;
|
||||
c.height = window.innerHeight;
|
||||
ctx.translate(c.width / 2, c.height / 2);
|
||||
ctx.scale(1.5, -1.5);
|
||||
}, true);
|
||||
|
||||
Update();
|
||||
|
||||
</script>
|
||||
</body>
|
||||
<p xmlns:cc="http://creativecommons.org/ns#" style="font-size: 1vw; bottom: 0px; position: absolute;">
|
||||
This work is licensed under
|
||||
<a href="http://creativecommons.org/licenses/by-nc-nd/4.0/?ref=chooser-v1" target="_blank" rel="license noopener noreferrer" style="display:inline-block;">CC BY-NC-ND 4.0<img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/nc.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/nd.svg?ref=chooser-v1"></a></p>
|
||||
</html>
|
||||
206
5-29.html
Normal file
206
5-29.html
Normal file
@@ -0,0 +1,206 @@
|
||||
<!--
|
||||
This work is licensed under CC BY-NC-ND 4.0
|
||||
Link to license: http://creativecommons.org/licenses/by-nc-nd/4.0/
|
||||
Attribute to Russell Georgi
|
||||
-->
|
||||
<html>
|
||||
<head>
|
||||
<title>
|
||||
Problem 5-29
|
||||
</title>
|
||||
<style>
|
||||
html, body {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
margin: 0px;
|
||||
border: 0;
|
||||
overflow: hidden;
|
||||
display: block;
|
||||
}
|
||||
|
||||
canvas {
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
|
||||
.dropbtn {
|
||||
background-color: #04AA6D;
|
||||
color: white;
|
||||
padding: 16px;
|
||||
font-size: 16px;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.dropbtnm {
|
||||
background-color: #04AA6D;
|
||||
color: white;
|
||||
padding: 16px;
|
||||
font-size: 16px;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.dropdown {
|
||||
position: absolute;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.dropdown-content {
|
||||
display: none;
|
||||
position: relative;
|
||||
background-color: #f1f1f1;
|
||||
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.dropdown-content button {
|
||||
color: black;
|
||||
padding: 12px 16px;
|
||||
width: 100px;
|
||||
text-decoration: none;
|
||||
display: block;
|
||||
}
|
||||
|
||||
#m {
|
||||
left: 110px;
|
||||
}
|
||||
|
||||
.dropdown-content a:hover {background-color: #ddd;}
|
||||
|
||||
.dropdown:hover .dropdown-content {display: block;}
|
||||
|
||||
.dropdown:hover .dropbtn {background-color: #3e8e41;}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<canvas id="myCanvas" width="1" height="1" style="border:1px solid #ffffff;">
|
||||
Your browser does not support the HTML5 canvas tag.</canvas>
|
||||
|
||||
<script>
|
||||
class Vector2 {
|
||||
constructor (x, y) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
}
|
||||
|
||||
scale(n)
|
||||
{
|
||||
this.x *= n;
|
||||
this.y *= n;
|
||||
}
|
||||
|
||||
get len()
|
||||
{
|
||||
return this.calcLen();
|
||||
}
|
||||
|
||||
calcLen()
|
||||
{
|
||||
return (Math.sqrt(this.x * this.x + this.y * this.y));
|
||||
}
|
||||
}
|
||||
var c = document.getElementById("myCanvas");
|
||||
var ctx = c.getContext("2d");
|
||||
ctx.canvas.width = window.innerWidth;
|
||||
ctx.canvas.height = window.innerHeight;
|
||||
var l = 100;
|
||||
var r = 50;
|
||||
var ppl = 2.0;
|
||||
var g = 10;
|
||||
var n = 500;
|
||||
//var f = 1;
|
||||
var chainPositions = new Array(1);
|
||||
var chainPrevPositions = new Array(1);
|
||||
var t = 0;
|
||||
var dt = 0.0125;
|
||||
var xPos = 0;
|
||||
var yPos = 100;
|
||||
|
||||
ctx.translate(ctx.canvas.width / 2, ctx.canvas.height / 2);
|
||||
ctx.scale(1.5, -1.5);
|
||||
chainPositions[0] = new Vector2(r, 0);
|
||||
chainPrevPositions[0] = new Vector2(r, 0);
|
||||
for (i = ppl; i < r * Math.PI; i += ppl)
|
||||
{
|
||||
chainPositions.push(new Vector2(r * Math.cos(i / r), -r * Math.sin(i / r)));
|
||||
chainPrevPositions.push(new Vector2(r * Math.cos(i / r), -r * Math.sin(i / r)));
|
||||
}
|
||||
for (i = 0; i < l; i += ppl)
|
||||
{
|
||||
chainPositions.push(new Vector2(-r, i));
|
||||
chainPrevPositions.push(new Vector2(-r, i));
|
||||
}
|
||||
|
||||
|
||||
function Clear(ctx)
|
||||
{
|
||||
ctx.clearRect(-c.width, -c.height, c.width * 2, c.height * 2);
|
||||
}
|
||||
|
||||
function Update()
|
||||
{
|
||||
Clear(ctx);
|
||||
Draw();
|
||||
t += dt;
|
||||
for (i = 1; i < chainPositions.length; i++)
|
||||
{
|
||||
positionBeforeUpdate = chainPositions[i];
|
||||
chainPositions[i] = new Vector2(2 * chainPositions[i].x - chainPrevPositions[i].x, 2 * chainPositions[i].y - chainPrevPositions[i].y);
|
||||
chainPositions[i].y -= g * dt * dt;
|
||||
chainPrevPositions[i] = positionBeforeUpdate;
|
||||
/*stickCentre = new Vector2((chainPositions[i - 1].x + chainPositions[i].x) / 2, (chainPositions[i - 1].y + chainPositions[i].y) / 2);
|
||||
stickDir = new Vector2(chainPositions[i - 1].x - chainPositions[i].x, chainPositions[i - 1].y - chainPositions[i].y);
|
||||
stickDir = new Vector2(stickDir.x / stickDir.calcLen(), stickDir.y / stickDir.calcLen());
|
||||
if (i != 1)
|
||||
{
|
||||
chainPositions[i - 1] = new Vector2(stickCentre.x + stickDir.x * ppl / 2, stickCentre.y + stickDir.y * ppl / 2);
|
||||
}
|
||||
chainPositions[i] = new Vector2(stickCentre.x - stickDir.x * ppl / 2, stickCentre.y - stickDir.y * ppl / 2);*/
|
||||
}
|
||||
for (j = 0; j < n; j++)
|
||||
{
|
||||
//i = Math.floor(Math.random()*(chainPositions.length - 1));
|
||||
i = j % (chainPositions.length - 1);
|
||||
stickCentre = new Vector2((chainPositions[i].x + chainPositions[i + 1].x) / 2, (chainPositions[i].y + chainPositions[i + 1].y) / 2);
|
||||
stickDir = new Vector2(chainPositions[i].x - chainPositions[i + 1].x, chainPositions[i].y - chainPositions[i + 1].y);
|
||||
stickDir = new Vector2(stickDir.x / stickDir.calcLen(), stickDir.y / stickDir.calcLen());
|
||||
if (i != 0)
|
||||
{
|
||||
chainPositions[i] = new Vector2(stickCentre.x + stickDir.x * ppl / 2, stickCentre.y + stickDir.y * ppl / 2);
|
||||
}
|
||||
chainPositions[i + 1] = new Vector2(stickCentre.x - stickDir.x * ppl / 2, stickCentre.y - stickDir.y * ppl / 2);
|
||||
}
|
||||
setTimeout(Update, 500/60);
|
||||
}
|
||||
|
||||
|
||||
function Draw()
|
||||
{
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(chainPositions[0].x + xPos, chainPositions[0].y + yPos);
|
||||
for (i = 1; i < chainPositions.length; i++)
|
||||
{
|
||||
ctx.lineTo(chainPositions[i].x + xPos, chainPositions[i].y + yPos);
|
||||
}
|
||||
ctx.stroke();
|
||||
}
|
||||
|
||||
function vectorAdd(v1, v2)
|
||||
{
|
||||
return new Vector2(v1.x + v2.x, v1.y + v2.y);
|
||||
}
|
||||
|
||||
window.addEventListener('resize', function(event) {
|
||||
c.width = window.innerWidth;
|
||||
c.height = window.innerHeight;
|
||||
ctx.translate(c.width / 2, c.height / 2);
|
||||
ctx.scale(1.5, -1.5);
|
||||
}, true);
|
||||
|
||||
Update();
|
||||
|
||||
</script>
|
||||
</body>
|
||||
<p xmlns:cc="http://creativecommons.org/ns#" style="font-size: 1vw; bottom: 0px; position: absolute;">
|
||||
This work is licensed under
|
||||
<a href="http://creativecommons.org/licenses/by-nc-nd/4.0/?ref=chooser-v1" target="_blank" rel="license noopener noreferrer" style="display:inline-block;">CC BY-NC-ND 4.0<img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/nc.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/nd.svg?ref=chooser-v1"></a></p>
|
||||
</html>
|
||||
144
6-3.html
Normal file
144
6-3.html
Normal file
@@ -0,0 +1,144 @@
|
||||
<!--
|
||||
This work is licensed under CC BY-NC-ND 4.0
|
||||
Link to license: http://creativecommons.org/licenses/by-nc-nd/4.0/
|
||||
Attribute to Russell Georgi
|
||||
-->
|
||||
<html>
|
||||
<head>
|
||||
<title>
|
||||
Problem 6-3
|
||||
</title>
|
||||
<style>
|
||||
html, body {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
margin: 0px;
|
||||
border: 0;
|
||||
overflow: hidden;
|
||||
display: block;
|
||||
}
|
||||
|
||||
canvas {
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.greenSlider {
|
||||
-webkit-appearance: none;
|
||||
border-radius: 5px;
|
||||
height: 10px;
|
||||
background: #d3d3d3;
|
||||
outline: none;
|
||||
opacity: 0.7;
|
||||
-webkit-transition: .2s;
|
||||
transition: opacity .2s;
|
||||
|
||||
}
|
||||
|
||||
.greenSlider::-webkit-slider-thumb {
|
||||
-webkit-appearance: none;
|
||||
appearance: none;
|
||||
background: #000000;
|
||||
border-radius: 50%;
|
||||
width: 15px;
|
||||
height: 15px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.greenSlider::-moz-range-thumb {
|
||||
background: #000000;
|
||||
border-radius: 50%;
|
||||
width: 15px;
|
||||
height: 15px;
|
||||
cursor: pointer;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<canvas id="myCanvas" width="1" height="1" style="border:1px solid #ffffff;">
|
||||
Your browser does not support the HTML5 canvas tag.</canvas>
|
||||
<div class="slidecontainer">
|
||||
<t>Omega</t>
|
||||
<input type="range" min="1" max="10" value="6" step="1" class="greenSlider" id="wSlider">
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var c = document.getElementById("myCanvas");
|
||||
var ctx = c.getContext("2d");
|
||||
c.width = window.innerWidth;
|
||||
c.height = window.innerHeight;
|
||||
//Time step
|
||||
var dt = 0.01;
|
||||
var t = 0;
|
||||
var g = 98;
|
||||
var a = 10;
|
||||
var l = 200;
|
||||
var w = 6;
|
||||
var x = 0;
|
||||
var theta = Math.PI / 4;
|
||||
var thetap = 0;
|
||||
//Relative position of canvas
|
||||
var xPos = 0;
|
||||
var yPos = 100;
|
||||
//Moves and scales canvas
|
||||
ctx.translate(ctx.canvas.width / 2, ctx.canvas.height / 2)
|
||||
ctx.scale(1, -1);
|
||||
|
||||
wSlider.oninput = function()
|
||||
{
|
||||
w = parseFloat(this.value);
|
||||
Reset();
|
||||
}
|
||||
|
||||
function Clear(ctx)
|
||||
{
|
||||
ctx.clearRect(-c.width, -c.height, c.width * 2, c.height * 2);
|
||||
}
|
||||
|
||||
function Update()
|
||||
{
|
||||
x = a * Math.cos(w * t);
|
||||
Clear(ctx);
|
||||
Draw();
|
||||
t += dt;
|
||||
thetap += ((x * w * w * Math.cos(theta)) - g * Math.sin(theta)) * dt / l;
|
||||
theta += thetap * dt;
|
||||
setTimeout(Update, 1);
|
||||
}
|
||||
|
||||
function Reset()
|
||||
{
|
||||
theta = Math.PI / 4;
|
||||
thetap = 0;
|
||||
t = 0;
|
||||
}
|
||||
|
||||
function Draw()
|
||||
{
|
||||
ctx.beginPath();
|
||||
ctx.rect(-20 + xPos + x, -20 + yPos, 40, 40);
|
||||
ctx.stroke();
|
||||
ctx.beginPath();
|
||||
ctx.arc(xPos + l * Math.sin(theta) + x, yPos - l * Math.cos(theta), 10, 0, Math.PI * 2);
|
||||
ctx.fill();
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(xPos + x, yPos - 20);
|
||||
ctx.lineTo(xPos + l * Math.sin(theta) + x, yPos - l * Math.cos(theta));
|
||||
ctx.stroke();
|
||||
}
|
||||
|
||||
|
||||
window.addEventListener('resize', function(event) {
|
||||
c.width = window.innerWidth;
|
||||
c.height = window.innerHeight;
|
||||
ctx.translate(c.width / 2, c.height / 2);
|
||||
ctx.scale(1, -1);
|
||||
}, true);
|
||||
|
||||
Update();
|
||||
|
||||
</script>
|
||||
</body>
|
||||
<p xmlns:cc="http://creativecommons.org/ns#" style="font-size: 1vw; bottom: 0px; position: absolute;">
|
||||
This work is licensed under
|
||||
<a href="http://creativecommons.org/licenses/by-nc-nd/4.0/?ref=chooser-v1" target="_blank" rel="license noopener noreferrer" style="display:inline-block;">CC BY-NC-ND 4.0<img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/nc.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/nd.svg?ref=chooser-v1"></a></p>
|
||||
</html>
|
||||
144
6-5.html
Normal file
144
6-5.html
Normal file
@@ -0,0 +1,144 @@
|
||||
<!--
|
||||
This work is licensed under CC BY-NC-ND 4.0
|
||||
Link to license: http://creativecommons.org/licenses/by-nc-nd/4.0/
|
||||
Attribute to Russell Georgi
|
||||
-->
|
||||
<html>
|
||||
<head>
|
||||
<title>
|
||||
Problem 6-5
|
||||
</title>
|
||||
<style>
|
||||
html, body {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
margin: 0px;
|
||||
border: 0;
|
||||
overflow: hidden;
|
||||
display: block;
|
||||
}
|
||||
|
||||
canvas {
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.greenSlider {
|
||||
-webkit-appearance: none;
|
||||
border-radius: 5px;
|
||||
height: 10px;
|
||||
background: #d3d3d3;
|
||||
outline: none;
|
||||
opacity: 0.7;
|
||||
-webkit-transition: .2s;
|
||||
transition: opacity .2s;
|
||||
|
||||
}
|
||||
|
||||
.greenSlider::-webkit-slider-thumb {
|
||||
-webkit-appearance: none;
|
||||
appearance: none;
|
||||
background: #000000;
|
||||
border-radius: 50%;
|
||||
width: 15px;
|
||||
height: 15px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.greenSlider::-moz-range-thumb {
|
||||
background: #000000;
|
||||
border-radius: 50%;
|
||||
width: 15px;
|
||||
height: 15px;
|
||||
cursor: pointer;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<canvas id="myCanvas" width="1" height="1" style="border:1px solid #ffffff;">
|
||||
Your browser does not support the HTML5 canvas tag.</canvas>
|
||||
<div class="slidecontainer">
|
||||
<t>Omega</t>
|
||||
<input type="range" min="1" max="100" value="65" step="1" class="greenSlider" id="wSlider">
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var c = document.getElementById("myCanvas");
|
||||
var ctx = c.getContext("2d");
|
||||
c.width = window.innerWidth;
|
||||
c.height = window.innerHeight;
|
||||
//Time step
|
||||
var dt = 0.01;
|
||||
var t = 0;
|
||||
var g = 98;
|
||||
var a = 5;
|
||||
var l = 200;
|
||||
var w = 65;
|
||||
var y = 0;
|
||||
var theta = 0.1;
|
||||
var thetap = 0;
|
||||
//Relative position of canvas
|
||||
var xPos = 0;
|
||||
var yPos = 0;
|
||||
//Moves and scales canvas
|
||||
ctx.translate(ctx.canvas.width / 2, ctx.canvas.height / 2)
|
||||
ctx.scale(1, -1);
|
||||
|
||||
wSlider.oninput = function()
|
||||
{
|
||||
w = parseFloat(this.value);
|
||||
Reset();
|
||||
}
|
||||
|
||||
function Clear(ctx)
|
||||
{
|
||||
ctx.clearRect(-c.width, -c.height, c.width * 2, c.height * 2);
|
||||
}
|
||||
|
||||
function Update()
|
||||
{
|
||||
y = a * Math.cos(w * t);
|
||||
Clear(ctx);
|
||||
Draw();
|
||||
t += dt;
|
||||
thetap += (-Math.sin(theta) * (y * w * w - g)) * dt / l;
|
||||
theta += thetap * dt;
|
||||
setTimeout(Update, 1);
|
||||
}
|
||||
|
||||
function Reset()
|
||||
{
|
||||
theta = 0.1;
|
||||
thetap = 0;
|
||||
t = 0;
|
||||
}
|
||||
|
||||
function Draw()
|
||||
{
|
||||
ctx.beginPath();
|
||||
ctx.rect(-20 + xPos, -20 + yPos + y, 40, 40);
|
||||
ctx.stroke();
|
||||
ctx.beginPath();
|
||||
ctx.arc(xPos + l * Math.sin(theta), yPos + y + l * Math.cos(theta), 10, 0, Math.PI * 2);
|
||||
ctx.fill();
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(xPos, yPos + y + 20);
|
||||
ctx.lineTo(xPos + l * Math.sin(theta), yPos + y + l * Math.cos(theta));
|
||||
ctx.stroke();
|
||||
}
|
||||
|
||||
|
||||
window.addEventListener('resize', function(event) {
|
||||
c.width = window.innerWidth;
|
||||
c.height = window.innerHeight;
|
||||
ctx.translate(c.width / 2, c.height / 2);
|
||||
ctx.scale(1, -1);
|
||||
}, true);
|
||||
|
||||
Update();
|
||||
|
||||
</script>
|
||||
</body>
|
||||
<p xmlns:cc="http://creativecommons.org/ns#" style="font-size: 1vw; bottom: 0px; position: absolute;">
|
||||
This work is licensed under
|
||||
<a href="http://creativecommons.org/licenses/by-nc-nd/4.0/?ref=chooser-v1" target="_blank" rel="license noopener noreferrer" style="display:inline-block;">CC BY-NC-ND 4.0<img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/nc.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/nd.svg?ref=chooser-v1"></a></p>
|
||||
</html>
|
||||
153
7-4.html
Normal file
153
7-4.html
Normal file
@@ -0,0 +1,153 @@
|
||||
<!--
|
||||
This work is licensed under CC BY-NC-ND 4.0
|
||||
Link to license: http://creativecommons.org/licenses/by-nc-nd/4.0/
|
||||
Attribute to Russell Georgi
|
||||
-->
|
||||
<html>
|
||||
<head>
|
||||
<title>
|
||||
Problem 7-4
|
||||
</title>
|
||||
<style>
|
||||
html, body {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
margin: 0px;
|
||||
border: 0;
|
||||
overflow: hidden;
|
||||
display: block;
|
||||
}
|
||||
|
||||
canvas {
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.greenSlider {
|
||||
-webkit-appearance: none;
|
||||
border-radius: 5px;
|
||||
height: 10px;
|
||||
background: #d3d3d3;
|
||||
outline: none;
|
||||
opacity: 0.7;
|
||||
-webkit-transition: .2s;
|
||||
transition: opacity .2s;
|
||||
|
||||
}
|
||||
|
||||
.greenSlider::-webkit-slider-thumb {
|
||||
-webkit-appearance: none;
|
||||
appearance: none;
|
||||
background: #000000;
|
||||
border-radius: 50%;
|
||||
width: 15px;
|
||||
height: 15px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.greenSlider::-moz-range-thumb {
|
||||
background: #000000;
|
||||
border-radius: 50%;
|
||||
width: 15px;
|
||||
height: 15px;
|
||||
cursor: pointer;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<form>
|
||||
<label for="k">k</label>
|
||||
<input type="number" id="k" name="k" min="-2" max="10" step = "0.1" value = "2">
|
||||
</form>
|
||||
<canvas id="myCanvas" width="1" height="1" style="border:1px solid #ffffff;">
|
||||
Your browser does not support the HTML5 canvas tag.</canvas>
|
||||
|
||||
<script>
|
||||
var c = document.getElementById("myCanvas");
|
||||
var ctx = c.getContext("2d");
|
||||
c.width = window.innerWidth;
|
||||
c.height = window.innerHeight;
|
||||
//Time step
|
||||
var dt = 0.01;
|
||||
var t = 0;
|
||||
var omegaTheta = 1;
|
||||
var r = 200;
|
||||
var k = 2;
|
||||
var omegaR = omegaTheta * Math.sqrt(k + 2);
|
||||
var smallAmp = 20;
|
||||
var xPositions = new Array();
|
||||
var yPositions = new Array();
|
||||
//Relative position of canvas
|
||||
var xPos = 0;
|
||||
var yPos = 0;
|
||||
//Moves and scales canvas
|
||||
ctx.translate(ctx.canvas.width / 2, ctx.canvas.height / 2)
|
||||
ctx.scale(1, -1);
|
||||
|
||||
function changeK(newK)
|
||||
{
|
||||
k = newK;
|
||||
omegaR = omegaTheta * Math.sqrt(k + 2);
|
||||
Reset();
|
||||
}
|
||||
|
||||
function Clear(ctx)
|
||||
{
|
||||
ctx.clearRect(-c.width, -c.height, c.width * 2, c.height * 2);
|
||||
}
|
||||
|
||||
function Update()
|
||||
{
|
||||
if (parseFloat(document.getElementById("k").value) != k)
|
||||
{
|
||||
changeK(parseFloat(document.getElementById("k").value));
|
||||
}
|
||||
Clear(ctx);
|
||||
Draw();
|
||||
t += dt;
|
||||
setTimeout(Update, 1);
|
||||
}
|
||||
|
||||
function Reset()
|
||||
{
|
||||
t = 0;
|
||||
xPositions = new Array();
|
||||
yPositions = new Array();
|
||||
}
|
||||
|
||||
function Draw()
|
||||
{
|
||||
ctx.setLineDash([5, 5]);
|
||||
ctx.beginPath();
|
||||
ctx.arc(xPos, yPos, r, 0, Math.PI * 2);
|
||||
ctx.stroke();
|
||||
xPositions.push((r + smallAmp * Math.cos(omegaR * t)) * Math.cos(omegaTheta * t));
|
||||
yPositions.push((r + smallAmp * Math.cos(omegaR * t)) * Math.sin(omegaTheta * t));
|
||||
ctx.setLineDash([]);
|
||||
ctx.beginPath();
|
||||
ctx.arc((r + smallAmp * Math.cos(omegaR * t)) * Math.cos(omegaTheta * t) + xPos, (r + smallAmp * Math.cos(omegaR * t)) * Math.sin(omegaTheta * t) + yPos, 5, 0, Math.PI * 2);
|
||||
ctx.fill();
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(r + smallAmp + xPos, yPos);
|
||||
for (i = 0; i < xPositions.length; i++)
|
||||
{
|
||||
ctx.lineTo(xPositions[i] + xPos, yPositions[i] + yPos);
|
||||
}
|
||||
ctx.stroke();
|
||||
}
|
||||
|
||||
|
||||
window.addEventListener('resize', function(event) {
|
||||
c.width = window.innerWidth;
|
||||
c.height = window.innerHeight;
|
||||
ctx.translate(c.width / 2, c.height / 2);
|
||||
ctx.scale(1, -1);
|
||||
}, true);
|
||||
|
||||
Update();
|
||||
|
||||
</script>
|
||||
</body>
|
||||
<p xmlns:cc="http://creativecommons.org/ns#" style="font-size: 1vw; bottom: 0px; position: absolute;">
|
||||
This work is licensed under
|
||||
<a href="http://creativecommons.org/licenses/by-nc-nd/4.0/?ref=chooser-v1" target="_blank" rel="license noopener noreferrer" style="display:inline-block;">CC BY-NC-ND 4.0<img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/nc.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/nd.svg?ref=chooser-v1"></a></p>
|
||||
</html>
|
||||
177
8-1.html
Normal file
177
8-1.html
Normal file
@@ -0,0 +1,177 @@
|
||||
<!--
|
||||
This work is licensed under CC BY-NC-ND 4.0
|
||||
Link to license: http://creativecommons.org/licenses/by-nc-nd/4.0/
|
||||
Attribute to Russell Georgi
|
||||
-->
|
||||
<html>
|
||||
<head>
|
||||
<title>
|
||||
Problem 8-1
|
||||
</title>
|
||||
<style>
|
||||
html, body {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
margin: 0px;
|
||||
border: 0;
|
||||
overflow: hidden;
|
||||
display: block;
|
||||
}
|
||||
|
||||
canvas {
|
||||
position: absolute;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<canvas id="myCanvas" width="1" height="1" style="border:1px solid #ffffff;">
|
||||
Your browser does not support the HTML5 canvas tag.</canvas>
|
||||
|
||||
<script>
|
||||
var c = document.getElementById("myCanvas");
|
||||
var ctx = c.getContext("2d");
|
||||
c.width = window.innerWidth;
|
||||
c.height = window.innerHeight;
|
||||
//Time step
|
||||
var dt = 0.002;
|
||||
var t = 0;
|
||||
var g = 98;
|
||||
var y1 = 0;
|
||||
var y2 = 0;
|
||||
var y3 = 0;
|
||||
var y4 = 0;
|
||||
var v = 0;
|
||||
var v2 = 0;
|
||||
var r = 20;
|
||||
var xDist = 100;
|
||||
var theta = 0;
|
||||
var a = 2 * g / 7;
|
||||
var a2 = g / 3;
|
||||
//Relative position of canvas
|
||||
var xPos = -50;
|
||||
var yPos = 70;
|
||||
//Moves and scales canvas
|
||||
ctx.translate(ctx.canvas.width / 2, ctx.canvas.height / 2)
|
||||
ctx.scale(2, -2);
|
||||
|
||||
function Clear(ctx)
|
||||
{
|
||||
ctx.clearRect(-c.width, -c.height, c.width * 2, c.height * 2);
|
||||
}
|
||||
|
||||
function Update()
|
||||
{
|
||||
Clear(ctx);
|
||||
Draw();
|
||||
t += dt;
|
||||
v += a * dt;
|
||||
v2 += a2 * dt;
|
||||
y1 += v * dt;
|
||||
y2 -= v * dt;
|
||||
y3 += v2 * dt;
|
||||
y4 -= v2 * dt;
|
||||
theta -= v * dt;
|
||||
if (Math.sqrt(((100 - y3) ** 2) + (400)) < 30)
|
||||
{
|
||||
Reset();
|
||||
}
|
||||
if (Math.sqrt(((100 - y4) ** 2) + (400)) < 30)
|
||||
{
|
||||
Reset();
|
||||
}
|
||||
setTimeout(Update, 5);
|
||||
}
|
||||
|
||||
function Reset()
|
||||
{
|
||||
y1 = 0;
|
||||
y2 = 0;
|
||||
y3 = 0;
|
||||
y4 = 0;
|
||||
theta = 0;
|
||||
v = 0;
|
||||
v2 = 0;
|
||||
}
|
||||
|
||||
function Draw()
|
||||
{
|
||||
ctx.setLineDash([]);
|
||||
ctx.fillStyle = "#999999";
|
||||
ctx.beginPath();
|
||||
ctx.arc(xPos, yPos, r, 0, Math.PI * 2);
|
||||
ctx.fill();
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(xPos, yPos);
|
||||
ctx.lineTo(xPos + r * Math.cos(theta), yPos + r * Math.sin(theta));
|
||||
ctx.stroke();
|
||||
ctx.beginPath();
|
||||
ctx.arc(xPos, yPos, r, 0, Math.PI * 2);
|
||||
ctx.stroke();
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(xPos + r, yPos);
|
||||
ctx.lineTo(xPos + r, yPos - (100 - y2));
|
||||
ctx.stroke();
|
||||
ctx.fillStyle = "#000000";
|
||||
ctx.beginPath();
|
||||
ctx.arc(xPos + r, yPos - (100 - y2), Math.PI * Math.sqrt(2), 0, Math.PI * 2);
|
||||
ctx.fill();
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(xPos - r, yPos);
|
||||
ctx.lineTo(xPos - r, yPos - (100 - y1));
|
||||
ctx.stroke();
|
||||
ctx.beginPath();
|
||||
ctx.arc(xPos - r, yPos - (100 - y1), Math.PI, 0, Math.PI * 2);
|
||||
ctx.fill();
|
||||
ctx.beginPath();
|
||||
ctx.arc(xPos + xDist, yPos, r, 0, Math.PI * 2);
|
||||
ctx.stroke();
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(xPos + xDist + r, yPos);
|
||||
ctx.lineTo(xPos + xDist + r, yPos - (100 - y4));
|
||||
ctx.stroke();
|
||||
ctx.fillStyle = "#000000";
|
||||
ctx.beginPath();
|
||||
ctx.arc(xPos + xDist + r, yPos - (100 - y4), Math.PI * Math.sqrt(2), 0, Math.PI * 2);
|
||||
ctx.fill();
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(xPos + xDist - r, yPos);
|
||||
ctx.lineTo(xPos + xDist - r, yPos - (100 - y3));
|
||||
ctx.stroke();
|
||||
ctx.beginPath();
|
||||
ctx.arc(xPos + xDist - r, yPos - (100 - y3), Math.PI, 0, Math.PI * 2);
|
||||
ctx.fill();
|
||||
ctx.setLineDash([2, 2]);
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(-c.width, yPos - 100 + y1);
|
||||
ctx.lineTo(c.width, yPos - 100 + y1);
|
||||
ctx.stroke();
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(-c.width, yPos - 100 + y2);
|
||||
ctx.lineTo(c.width, yPos - 100 + y2);
|
||||
ctx.stroke();
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(-c.width, yPos - 100 + y3);
|
||||
ctx.lineTo(c.width, yPos - 100 + y3);
|
||||
ctx.stroke();
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(-c.width, yPos - 100 + y4);
|
||||
ctx.lineTo(c.width, yPos - 100 + y4);
|
||||
ctx.stroke();
|
||||
}
|
||||
|
||||
|
||||
window.addEventListener('resize', function(event) {
|
||||
c.width = window.innerWidth;
|
||||
c.height = window.innerHeight;
|
||||
ctx.translate(c.width / 2, c.height / 2);
|
||||
ctx.scale(2, -2);
|
||||
}, true);
|
||||
|
||||
Update();
|
||||
|
||||
</script>
|
||||
</body>
|
||||
<p xmlns:cc="http://creativecommons.org/ns#" style="font-size: 1vw; bottom: 0px; position: absolute;">
|
||||
This work is licensed under
|
||||
<a href="http://creativecommons.org/licenses/by-nc-nd/4.0/?ref=chooser-v1" target="_blank" rel="license noopener noreferrer" style="display:inline-block;">CC BY-NC-ND 4.0<img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/nc.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/nd.svg?ref=chooser-v1"></a></p>
|
||||
</html>
|
||||
@@ -6,7 +6,7 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>
|
||||
Exercise 8-66
|
||||
Exercise 8-76
|
||||
</title>
|
||||
<style>
|
||||
html, body {
|
||||
@@ -91,13 +91,13 @@
|
||||
var t = 0;
|
||||
var g = -500;
|
||||
var y = 110;
|
||||
var vy = 0;
|
||||
var vy = -200;
|
||||
var x = 0;
|
||||
var vx = 20;
|
||||
var h = 120;
|
||||
var omega = 20;
|
||||
var theta = 0;
|
||||
var r = 10;
|
||||
var r = 5;
|
||||
var tableX = 100;
|
||||
var positionsX = [0];
|
||||
var positionsY = [110];
|
||||
@@ -197,7 +197,7 @@
|
||||
y = parseFloat(document.getElementById("ySlider").value);
|
||||
theta = 0;
|
||||
vx = parseFloat(document.getElementById("vxSlider").value);
|
||||
vy = 0;
|
||||
vy = -200;
|
||||
omega = parseFloat(document.getElementById("wSlider").value);
|
||||
positionsX = [0];
|
||||
positionsY = [y];
|
||||
@@ -1 +1,3 @@
|
||||
[Full list of programs](https://azgeorgis.net/rmg/morin/)
|
||||
[Full list of programs](https://azgeorgis.net/rmg/morin/)
|
||||
[Problems and solutions]
|
||||
(https://azgeorgis.net/rmg/morin/morin.pdf)
|
||||
214
gravity.html
Normal file
214
gravity.html
Normal file
@@ -0,0 +1,214 @@
|
||||
<!--
|
||||
This work is licensed under CC BY-NC-ND 4.0
|
||||
Link to license: http://creativecommons.org/licenses/by-nc-nd/4.0/
|
||||
Attribute to Russell Georgi
|
||||
-->
|
||||
<html>
|
||||
<head>
|
||||
<title>
|
||||
Chapter 7 - Gravity and Kepler's Laws
|
||||
</title>
|
||||
<style>
|
||||
html, body {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
margin: 0px;
|
||||
border: 0;
|
||||
overflow: hidden;
|
||||
display: block;
|
||||
}
|
||||
|
||||
canvas {
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.greenSlider {
|
||||
-webkit-appearance: none;
|
||||
border-radius: 5px;
|
||||
height: 10px;
|
||||
background: #d3d3d3;
|
||||
outline: none;
|
||||
opacity: 0.7;
|
||||
-webkit-transition: .2s;
|
||||
transition: opacity .2s;
|
||||
|
||||
}
|
||||
|
||||
.greenSlider::-webkit-slider-thumb {
|
||||
-webkit-appearance: none;
|
||||
appearance: none;
|
||||
background: #000000;
|
||||
border-radius: 50%;
|
||||
width: 15px;
|
||||
height: 15px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.greenSlider::-moz-range-thumb {
|
||||
background: #000000;
|
||||
border-radius: 50%;
|
||||
width: 15px;
|
||||
height: 15px;
|
||||
cursor: pointer;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<canvas id="myCanvas" width="1" height="1" style="border:1px solid #ffffff;">
|
||||
Your browser does not support the HTML5 canvas tag.</canvas>
|
||||
|
||||
<script>
|
||||
var c = document.getElementById("myCanvas");
|
||||
var ctx = c.getContext("2d");
|
||||
c.width = window.innerWidth;
|
||||
c.height = window.innerHeight;
|
||||
//Time step
|
||||
var dt = 0.01;
|
||||
var rc = 25;
|
||||
var a = 100000 * rc * rc / 625;
|
||||
var x = 100;
|
||||
var y = -50;
|
||||
var xVel = 25;
|
||||
var yVel = 0;
|
||||
|
||||
var clickedOnMass = false;
|
||||
var clickedOnPlanet = false;
|
||||
var dragging = false;
|
||||
var maxDist = 5;
|
||||
//Relative position of canvas
|
||||
var xPos = 0;
|
||||
var yPos = 0;
|
||||
|
||||
//Moves and scales canvas
|
||||
ctx.translate(ctx.canvas.width / 2, ctx.canvas.height / 2);
|
||||
ctx.scale(1, -1);
|
||||
Draw();
|
||||
|
||||
function Clear(ctx)
|
||||
{
|
||||
ctx.clearRect(-c.width, -c.height, c.width * 2, c.height * 2);
|
||||
}
|
||||
|
||||
function Draw()
|
||||
{
|
||||
Clear(ctx);
|
||||
ctx.beginPath();
|
||||
ctx.arc(xPos, yPos, rc, 0, Math.PI * 2);
|
||||
ctx.fill();
|
||||
ctx.beginPath();
|
||||
ctx.arc(xPos + x, yPos + y, 5, 0, Math.PI * 2);
|
||||
ctx.fill();
|
||||
arrow(xPos + x, yPos + y, xPos + x + xVel, yPos + y + yVel);
|
||||
var xt = x;
|
||||
var yt = y;
|
||||
var xvt = xVel;
|
||||
var yvt = yVel;
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(xPos + x, yPos + y);
|
||||
for (t = 0; t < 200; t += dt)
|
||||
{
|
||||
var r = Math.sqrt(xt ** 2 + yt ** 2);
|
||||
var f = a / (r ** 2);
|
||||
var theta = Math.atan(yt/xt);
|
||||
if (xt < 0)
|
||||
{
|
||||
theta += Math.PI;
|
||||
}
|
||||
xvt -= f * Math.cos(theta) * dt;
|
||||
yvt -= f * Math.sin(theta) * dt;
|
||||
xt += xvt * dt;
|
||||
yt += yvt * dt;
|
||||
if (r < rc)
|
||||
{
|
||||
break;
|
||||
}
|
||||
if (t > 1 && Math.sqrt((xt - x) ** 2 + (yt - y) ** 2) < 2)
|
||||
{
|
||||
console.log("converges");
|
||||
}
|
||||
ctx.lineTo(xPos + xt, yPos + yt);
|
||||
}
|
||||
ctx.stroke();
|
||||
}
|
||||
|
||||
|
||||
window.addEventListener('resize', function(event) {
|
||||
c.width = window.innerWidth;
|
||||
c.height = window.innerHeight;
|
||||
ctx.translate(c.width / 2, c.height / 2);
|
||||
ctx.scale(1, -1);
|
||||
}, true);
|
||||
|
||||
function arrow(fromx, fromy, tox, toy) {
|
||||
var headlen = 10; // length of head in pixels
|
||||
var dx = tox - fromx;
|
||||
var dy = toy - fromy;
|
||||
var angle = Math.atan2(dy, dx);
|
||||
ctx.moveTo(fromx, fromy);
|
||||
ctx.lineTo(tox, toy);
|
||||
ctx.lineTo(tox - headlen * Math.cos(angle - Math.PI / 6), toy - headlen * Math.sin(angle - Math.PI / 6));
|
||||
ctx.moveTo(tox, toy);
|
||||
ctx.lineTo(tox - headlen * Math.cos(angle + Math.PI / 6), toy - headlen * Math.sin(angle + Math.PI / 6));
|
||||
ctx.stroke();
|
||||
}
|
||||
|
||||
document.addEventListener("mousedown", function(e)
|
||||
{
|
||||
var rect = c.getBoundingClientRect()
|
||||
var mouseX = e.clientX - rect.left - c.width / 2;
|
||||
var mouseY = e.clientY - rect.top - c.height / 2;
|
||||
mouseY *= -1;
|
||||
console.log("x: " + mouseX + " y: " + mouseY);
|
||||
if (Math.sqrt((mouseX - x) ** 2 + (mouseY - y) ** 2) < maxDist)
|
||||
{
|
||||
clickedOnMass = true;
|
||||
}
|
||||
if (Math.sqrt((mouseX) ** 2 + (mouseY) ** 2) < rc)
|
||||
{
|
||||
clickedOnPlanet = true;
|
||||
}
|
||||
dragging = true;
|
||||
});
|
||||
|
||||
document.addEventListener("mouseup", function(e)
|
||||
{
|
||||
dragging = false;
|
||||
clickedOnMass = false;
|
||||
clickedOnPlanet = false;
|
||||
});
|
||||
|
||||
document.addEventListener("mousemove", function(e)
|
||||
{
|
||||
if (clickedOnMass && dragging)
|
||||
{
|
||||
var rect = c.getBoundingClientRect()
|
||||
x = e.clientX - rect.left - c.width / 2;
|
||||
y = e.clientY - rect.top - c.height / 2;
|
||||
y *= -1;
|
||||
Draw();
|
||||
} else if (clickedOnPlanet && dragging)
|
||||
{
|
||||
var rect = c.getBoundingClientRect()
|
||||
mx = e.clientX - rect.left - c.width / 2;
|
||||
my = e.clientY - rect.top - c.height / 2;
|
||||
my *= -1;
|
||||
rc = Math.sqrt(mx ** 2 + my ** 2);
|
||||
a = 100000 * rc * rc / 625;
|
||||
Draw();
|
||||
} else if (dragging)
|
||||
{
|
||||
var rect = c.getBoundingClientRect()
|
||||
xVel = e.clientX - rect.left - c.width / 2 - x;
|
||||
yVel = e.clientY - rect.top - c.height / 2;
|
||||
yVel *= -1;
|
||||
yVel -= y;
|
||||
Draw();
|
||||
}
|
||||
});
|
||||
|
||||
</script>
|
||||
</body>
|
||||
<p xmlns:cc="http://creativecommons.org/ns#" style="font-size: 1vw; bottom: 0px; position: absolute;">
|
||||
This work is licensed under
|
||||
<a href="http://creativecommons.org/licenses/by-nc-nd/4.0/?ref=chooser-v1" target="_blank" rel="license noopener noreferrer" style="display:inline-block;">CC BY-NC-ND 4.0<img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/nc.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/nd.svg?ref=chooser-v1"></a></p>
|
||||
</html>
|
||||
BIN
images/2.7a.png
Normal file
BIN
images/2.7a.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 51 KiB |
BIN
images/2.7b.png
Normal file
BIN
images/2.7b.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 27 KiB |
BIN
images/2.7c.png
Normal file
BIN
images/2.7c.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 33 KiB |
112
index.html
112
index.html
@@ -184,11 +184,121 @@
|
||||
<t>Other example problem from chapter 4</t>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href='4-9.html'>Problem 4-9</a>
|
||||
</td>
|
||||
<td>
|
||||
<t>Unequal masses</t>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href='4-11.html'>Problem 4-11</a>
|
||||
</td>
|
||||
<td>
|
||||
<t>Driven mass on a circle</t>
|
||||
</td>
|
||||
</tr><tr>
|
||||
<td>
|
||||
<a href='4-12.html'>Problem 4-12</a>
|
||||
</td>
|
||||
<td>
|
||||
<t>Springs on a circle</t>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th colspan = "2">
|
||||
<t>Chapter 5: Conservation of energy and momentum</t>
|
||||
</th>
|
||||
</tr>
|
||||
</tr>
|
||||
<td>
|
||||
<a href='5-15and5-16.html'>Problems 5-15 and 5-16</a>
|
||||
</td>
|
||||
<td>
|
||||
<t>Comparison of propelling a car elastically and inelastically</t>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href='5-23.html'>Problem 5-23</a>
|
||||
</td>
|
||||
<td>
|
||||
<t>Basketball and tennis ball</t>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href='5-29.html'>Problem 5-29</a>
|
||||
</td>
|
||||
<td>
|
||||
<t>Falling energy conserving chain (only mostly correct)</t>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th colspan = "2">
|
||||
<t>Chapter 6: The Lagrangian method</t>
|
||||
</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href='springPendulum.html'>Spring pendulum</a>
|
||||
</td>
|
||||
<td>
|
||||
<t>Spring pendulum example problem</t>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href='6-3.html'>Problem 6-3</a>
|
||||
</td>
|
||||
<td>
|
||||
<t>Pendulum with an oscillating support</t>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href='6-5.html'>Problem 6-5</a>
|
||||
</td>
|
||||
<td>
|
||||
<t>Inverted pendulum - for high enough values of ω the pendulum stays upright</t>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th colspan = "2">
|
||||
<t>Chapter 7: Central forces</t>
|
||||
</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href='gravity.html'>Orbit simulation</a>
|
||||
</td>
|
||||
<td>
|
||||
<t>Simulation of mass in a gravitational field. Drag the small mass to change its position, drag outside the small mass to change its velocity, and drag the large mass to change the strength of the gravitational field.</t>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href='7-4.html'>Problem 7-4</a>
|
||||
</td>
|
||||
<td>
|
||||
<t>Mass in a r<sup>k</sup> potential. Forms a closed path if √(k + 2) is rational</t>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th colspan = "2">
|
||||
<t>Chapter 8: Angular momentum part 1</t>
|
||||
</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href='8-1.html'>Problem 8-1</a>
|
||||
</td>
|
||||
<td>
|
||||
<t>Atwood machine with massive pulley compared to atwood machine with massless pulley</t>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href='8-20.html'>Problem 8-20</a>
|
||||
@@ -199,7 +309,7 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href='8-66.html'>Exercises 8-66 & 8-77</a>
|
||||
<a href='8-76.html'>Exercises 8-76 & 8-77</a>
|
||||
</td>
|
||||
<td>
|
||||
<t>Superball bouncing under a table</t>
|
||||
|
||||
BIN
morin.synctex.gz
Normal file
BIN
morin.synctex.gz
Normal file
Binary file not shown.
650
morin.tex
Normal file
650
morin.tex
Normal file
@@ -0,0 +1,650 @@
|
||||
\documentclass{article}
|
||||
\usepackage[utf8]{inputenc}
|
||||
\usepackage[T1]{fontenc}
|
||||
\usepackage{geometry}
|
||||
\usepackage{hyperref}
|
||||
\usepackage{amsmath}
|
||||
\usepackage{graphicx}
|
||||
\graphicspath{ {./images/} }
|
||||
\geometry{a4paper}
|
||||
\title{Morin's Classical Mechanics}
|
||||
\author{Russell Georgi}
|
||||
\date{}
|
||||
\begin{document}
|
||||
\maketitle
|
||||
\textbf{1.1}
|
||||
\\
|
||||
The relevant variables are G (gravitational constant), M (mass of the planet), m (mass of the object), and R (distance from the planet). The escape velocity cannot depend on mass of the object because Newton's law of gravity takes the form of $\frac{GMm}{r^2}$, and because of $F=ma$, acceleration due to gravity divides that by m, leaving $\frac{GM}{r^2}$, which is independent of m. Thus, the variables this can depend on are G, M, and R. Therefore,
|
||||
$$(\frac{L^3}{MT^2})^a(M)^b(L)^c=(\frac{L}{T})$$
|
||||
Focusing on T, we have
|
||||
$$(\frac{1}{T^2})^a = (\frac{1}{T})$$
|
||||
and thus $a=\frac{1}{2}$.
|
||||
Plugging this back in we get
|
||||
$$(\frac{L^3}{MT^2})^\frac{1}{2}(M)^b(L)^c=(\frac{L}{T})$$
|
||||
Now focusing on M we have
|
||||
$$(\frac{1}{M})^\frac{1}{2}(M)^b=1$$
|
||||
so $b = \frac{1}{2}$.
|
||||
Finally focusing on L we have
|
||||
$$(L^3)^\frac{1}{2}(L)^c=L$$
|
||||
and thus $c=-\frac{1}{2}$.
|
||||
Thus escape velocity must be $$\sqrt{\frac{GM}{R}}$$ up to numerical factors.
|
||||
\\
|
||||
\textbf{1.2}
|
||||
\\
|
||||
The relevant variables are M, m and $\ell$. $\eta$ is dimensionless, so we have
|
||||
$$(M)^a(M)^b(L)^c = 1$$.
|
||||
Therefore trivially $a=-b$ and $c=0$, so it does not depend on $\ell$.
|
||||
\\
|
||||
\textbf{1.3}
|
||||
\\
|
||||
The relevant variables are $\rho$ and B, so we have
|
||||
$$(\frac{M}{L^3})^a(\frac{M}{LT^2})^b=\frac{L}{T}$$
|
||||
This gives $a=-\frac{1}{2}$ and $b=\frac{1}{2}$,
|
||||
so speed must be $$\sqrt{\frac{B}{\rho}}$$ up to numerical factors.
|
||||
\\
|
||||
\textbf{1.4}
|
||||
\\
|
||||
The relevant variables are R, $\rho$ and G, so we have
|
||||
$$(L)^a(\frac{M}{L^3})^b(\frac{L^3}{MT^2})^c=\frac{1}{T}$$
|
||||
Looking at T we have $$(\frac{1}{T^2})^c=\frac{1}{T}$$
|
||||
so $c=\frac{1}{2}$.
|
||||
Looking at L we have $$\frac{L^{3c}}{L^{\frac{3}{2}}} = 1$$
|
||||
so b must equal $\frac{1}{2}$ and a must equal 0.
|
||||
Thus frequency must be
|
||||
$$\sqrt{\rho G}$$ up to numerical factors.
|
||||
\\
|
||||
\textbf{1.5}
|
||||
\\
|
||||
a) The relevant variables are m, V, and b, however the units of b depend on n.
|
||||
$bv^n$ must have the units of force, so we have
|
||||
$$(b)(\frac{L}{T})^n=\frac{ML}{T^2}$$
|
||||
$$b=(\frac{ML}{T^2})(\frac{T}{L})^n$$
|
||||
$$b=\frac{MT^{n-2}}{L^{n-1}}$$
|
||||
Plugging this in we have
|
||||
$$(M)^a(\frac{L}{T})^b(\frac{MT^{n-2}}{L^{n-1}})^c=T$$
|
||||
Focusing on T this is
|
||||
$$(\frac{1}{T})^b(T^{n-2})^c=T$$
|
||||
thus $$1+b=c(n-2)$$
|
||||
Focusing on M this is
|
||||
$$(M)^a(M)^c=1$$
|
||||
thus $$a=-c$$
|
||||
Focusing on L this is $$(L)^b(\frac{1}{L^{n-1}})^c=1$$
|
||||
thus $$b=c(n-1)$$
|
||||
We have
|
||||
$$1+b=cn-2c$$
|
||||
$$b=cn-c$$
|
||||
Subtracting we get that $c=-1$, thus $a=1$ and $b=1-n$.
|
||||
Thus the stopping time is $$(\frac{m}{b})(V^{1-n})$$ up to numerical factors.
|
||||
b) Plugging everything in we have
|
||||
$$(M)^a(\frac{L}{T})^b(\frac{MT^{n-2}}{L^{n-1}})^c=L$$
|
||||
Focusing on T this is
|
||||
$$(\frac{1}{T})^b(T^{n-2})^c=1$$
|
||||
thus $$b=c(n-2)$$
|
||||
Focusing on M this is
|
||||
$$(M)^a(M)^c=1$$
|
||||
thus $$a=-c$$
|
||||
Focusing on L this is $$(L)^b(\frac{1}{L^{n-1}})^c=1$$
|
||||
thus $$b + 1=c(n-1)$$
|
||||
We have
|
||||
$$b=cn-2c$$
|
||||
$$1+b=cn-c$$
|
||||
Subtracting we get that $c=1$, thus $a=-1$ and $b=n-2$.
|
||||
Thus the stopping distance is $$(\frac{b}{m})(V^{n-2})$$ up to numerical factors.
|
||||
\\
|
||||
\textbf{1.6}
|
||||
\\
|
||||
$\frac{gh^2}{v^2}$ and $\sqrt{\frac{v^2h}{g}}$ go to zero for h=0, which is not right because the ball can still travel up to $\frac{v^2}{g}$ from $h=0$. $\frac{v^2}{g}$ is incorrect because it has no h dependence, which the correct solution obviously would have. $\frac{\frac{v^2}{g}}{1-\frac{2gh}{v^2}}$ is wrong because if you increase h too much it becomes negative, which is nonsensical in this context. $\frac{v^2}{g}(1+\frac{2gh}{v^2})$ is wrong because this simplifies to $\frac{v^2}{g} + 2h$, which is 2h at $v=0$, not zero. Therefore, $\frac{v^2}{g}\sqrt{1+\frac{2gh}{v^2}}$ must be correct by process of elimination.
|
||||
\\
|
||||
\textbf{1.7}
|
||||
\\
|
||||
\url{https://azgeorgis.net/rmg/morin/1-7.html}
|
||||
\\
|
||||
\textbf{2.1}
|
||||
\\
|
||||
Balancing forces on a piece of the rope gives
|
||||
$$T(\ell + d\ell)=T(\ell)+\rho d\ell g$$
|
||||
thus
|
||||
$$dT = \rho g d\ell$$
|
||||
thus
|
||||
$$T(\ell) = \rho g \ell$$
|
||||
\\
|
||||
\textbf{2.2}
|
||||
\\
|
||||
The normal force on the block is $mg\cos(\theta)$ perpendicular to the plane, so the horizontal component of the normal force is $mg\sin(\theta)\cos(\theta)$. Likewise, the friction force is just large enough to balance the gravitational force, so it is $\mu mg\sin(\theta)$, thus its horizontal component is $\mu mg\cos(\theta)\sin(\theta)$. These are maximized when their derivatives are zero, so we have $$\frac{d}{d\theta}\cos(\theta)\sin(\theta)=0$$
|
||||
$$\cos^2(\theta)-\sin^2(\theta)=0$$
|
||||
$$\cos(\theta)=\sin(\theta)$$
|
||||
$$\theta=\frac{\pi}{4}$$
|
||||
\\
|
||||
\textbf{2.3}
|
||||
\\
|
||||
The chain is in the shape of a function $y(x)$ with both endpoints equal.
|
||||
By trigonometry, he angle between the chain and the horizontal is $$\tan^{-1}({\frac{dy}{dx}})$$
|
||||
The length of a chunk of the chain is $$\sqrt{\frac{dy}{dx}^2+1}$$
|
||||
The force of gravity on a chunk of the chain is $g \lambda\sqrt{\frac{dy}{dx}^2+1} dx$, therefore the component of this parallel to the tube is $$g \sin{(\arctan{(\frac{dy}{dx})})} \lambda \sqrt{\frac{dy}{dx}^2+1}dx$$
|
||||
which is equivalent to
|
||||
$$\frac{g\lambda\frac{dy}{dx}\sqrt{\frac{dy}{dx}^2+1}}{\sqrt{\frac{dy}{dx}^2+1}}dx$$
|
||||
$$g\lambda\frac{dy}{dx}dx$$
|
||||
Integrating to obtain the force over the whole chain we get $$g\lambda\int_0^L \frac{dy}{dx} \,dx$$
|
||||
which is by the fundamental theorem of calculus just the change in the function over that interval, but the function has both endpoints at the same height, so it is just 0.
|
||||
\\
|
||||
\textbf{2.4}
|
||||
\\
|
||||
a) Horizontal $F=ma$ equation:
|
||||
$$F\cos(\theta)=F_{norm}$$
|
||||
Vertical $F=ma$ equation:
|
||||
$$Mg=F\sin(\theta)+\mu F_{norm}$$
|
||||
Substituting and solving:
|
||||
$$Mg = F\sin(\theta)+F\mu\cos(\theta)$$
|
||||
$$F=\frac{Mg}{\sin(\theta)+\mu\cos(\theta)}$$
|
||||
b) This is maximized when $\frac{dF}{d\theta}=0$, so we have
|
||||
$$\frac{Mg(\mu\sin(\theta)-\cos(\theta)}{(\mu\cos(\theta)+\sin(\theta))^2}=0$$
|
||||
Because the denominator cannot be infinity, the only way this can equal zero is if the numerator is zero, so
|
||||
$$Mg(\mu\sin(\theta)-\cos(\theta)=0$$
|
||||
$$\mu\sin(\theta)-\cos(\theta)=0$$
|
||||
$$\cot(\theta)=\mu$$
|
||||
$$\theta=\arctan(\frac{1}{\mu})$$
|
||||
The corresponding minimum F is
|
||||
$$F=\frac{Mg}{\sin(\arctan(\frac{1}{\mu}))+\mu\cos(\arctan(\frac{1}{\mu}))}$$
|
||||
$$F=\frac{Mg}{\cos(\arctan(\mu))+\mu\sin(\arctan(\mu))}$$
|
||||
$$F=\frac{Mg}{\frac{1}{\sqrt{\mu^2+1}}+\frac{\mu^2}{\sqrt{\mu^2+1}}}$$
|
||||
$$F=\frac{Mg}{\sqrt{\mu^2+1}}$$
|
||||
c) The minimum $\theta$ would be when F goes to infinity, so
|
||||
$$\sin(\theta)+\mu\cos(\theta)=0$$
|
||||
$$\tan(\theta) = -\mu$$
|
||||
$$\theta=-\arctan(\mu)$$
|
||||
\\
|
||||
\textbf{2.5}
|
||||
\\
|
||||
The force of gravity on an infinitesimal chunk of the rope is $$\rho g \sin(\theta) \,dx$$
|
||||
The friction force satisfies $$F_{frict}\leq \mu \rho g \cos(\theta) \,dx$$
|
||||
For the minimum tension, the friction force counteracts gravity,so f the friction force is greater than the gravitational force, there will be zero tension at the top of the rope. This implies
|
||||
$$\mu\rho g\cos(\theta)\,dx\geq\rho g\sin(\theta)\,dx$$
|
||||
$$\mu\cos(\theta)\geq\sin(\theta)$$
|
||||
$$\mu\geq\tan(\theta)$$
|
||||
If $\mu<\tan(\theta)$, then there will be a minimum tension force of $$\rho g \sin(\theta) L - \mu \rho g \cos(\theta) L$$
|
||||
On the other hand for the maximum tension, the friction acts with gravity, so we have a maximum tension force of $$\rho g \sin(\theta) L + \mu \rho g \cos(\theta) L$$
|
||||
\\
|
||||
\textbf{2.6}
|
||||
\\
|
||||
a) A small chunk of the rope applies a force to the disk of $$2Tsin(d\theta/2)$$
|
||||
which at small angles is approximately equal to $$T\,d\theta$$
|
||||
The vertical component of this is $$T\sin(\theta)\,d\theta$$
|
||||
Integrating this from 0 to $\pi$ we get $$\int_0^\pi T\sin(\theta) \,d\theta = 2T$$
|
||||
so $$2T = Mg$$
|
||||
$$T = \frac{Mg}{2}$$
|
||||
The normal force per unit length is $$\frac{T\pi}{\pi R} = \frac{T}{R}$$
|
||||
b) For the minimum tension force the friction force should always counteract the tension. We have for a chunk of rope $$dT \leq \mu T d\theta$$
|
||||
so at the bottom $$T \geq T_0e^{\frac{\mu \pi R}{2}}$$
|
||||
Since $T_0$ is $\frac{Mg}{2}$, the minimum tension at the bottom is $$\frac{Mg}{2}e^{\frac{\mu \pi R}{2}}$$
|
||||
\\
|
||||
\textbf{2.7}
|
||||
\\
|
||||
For each shape, balancing forces on the object gives $$2F_{norm}\sin(\theta)=mg$$
|
||||
and balancing forces on the circles gives $$F_{norm}\cos(\theta)=F$$ Solving we obtain
|
||||
$$F=\frac{mg\cos(\theta)}{2\sin(\theta)}$$
|
||||
Since $m=\sigma A$ this is $$F=\frac{\sigma A g\cos(\theta)}{2\sin(\theta)}$$
|
||||
The only thing remaining is to find A in terms of L and $\theta$ for each shape.
|
||||
\\
|
||||
a)
|
||||
\\
|
||||
\includegraphics[scale=0.4]{2.7a}
|
||||
\\
|
||||
If you continue the radii of the circle until they touch the top side of the triangle, an isosceles trapezoid is formed with the bottom two angles as $\theta$, therefore, the top two angles must be $\frac{\pi}{2}-\theta$. Thus, we can obtain the angles of the isosceles triangle to be $\frac{\pi}{2}-\theta$, $\frac{\pi}{2}-\theta$, and $2\theta$. The base is therefore $2L\sin(\theta)$, and the height is $L\cos(\theta)$, so the area is $L^2\cos(\theta)\sin(\theta)$. Thus the F is $$\frac{L^2\cos(\theta)\sin(\theta)\sigma g\cos(\theta)}{2\sin(\theta)}$$
|
||||
$$\frac{L^2\cos(\theta)^2\sigma g}{2}$$
|
||||
This value has a minimum of 0 at $\theta=\frac{\pi}{2}$.
|
||||
\\
|
||||
b)
|
||||
\\
|
||||
\includegraphics[scale=0.4]{2.7b}
|
||||
\\
|
||||
The width of the rectangle is $$2R-2R\cos(\theta)$$
|
||||
$$2R(1-\cos(\theta)$$
|
||||
Thus the area is $$2RL(1-\cos(\theta))$$
|
||||
and the force is $$F=\frac{mgRL(1-\cos(\theta))\cos(\theta)}{\sin(\theta)}$$
|
||||
\\
|
||||
c)
|
||||
\\
|
||||
\includegraphics[scale=0.4]{2.7c}
|
||||
\\
|
||||
The radius of the small circle is set by the equation $$2R=2(R+r)\cos(\theta)$$
|
||||
$$R(1-\cos(\theta))=r\cos(\theta)$$
|
||||
$$r=\frac{R(1-\cos(\theta))}{\cos(\theta)}$$
|
||||
Thus the area is $$\pi(\frac{R(1-\cos(\theta))}{\cos(\theta)})^2$$
|
||||
Plugging that back in we get $$F=\pi(\frac{R(1-\cos(\theta))}{\cos(\theta)})^2\frac{\sigma g\cos(\theta)}{2\sin(\theta)}$$
|
||||
$$F= \frac{\pi \sigma g R^2 (1-\cos(\theta))^2}{2\sin(\theta)\cos(\theta)}$$
|
||||
\\
|
||||
\textbf{2.8}
|
||||
\\
|
||||
Assume the tension is described by a function $T(x)$ and the height is described by a function $y(x)$.
|
||||
Consider a small piece of the chain. Balancing forces in the horizontal direction gives $$T(x)_x = T(x + dx)_x$$
|
||||
Thus the horinzontal component of the tension is constant. Balancing forces in the vertical direction gives $$T(x)_y = T(x + dx)_y + \lambda g \sqrt{1+y'(x)^2}dx$$
|
||||
$$T'(x)_y = \lambda g \sqrt{1+y'(x)^2}$$
|
||||
But because the tension must always point along the chain, we have $$\frac{T(x)_y}{T(x)_x}=y'(x)$$
|
||||
$$T(x)_y=y'(x)T(x)_x$$
|
||||
Because $T(x)_x$ is constant $$T'(x)_y = y''(x)T(x)_x$$
|
||||
Setting $C=\frac{\lambda g}{T(x)_x}$ we have
|
||||
$$y''(x) = C \sqrt{1+y'(x)^2}$$
|
||||
$$y''(x)^2 = C^2 + C^2 y'(x)^2$$
|
||||
Letting $z(x)=y'(x)$
|
||||
$$z'(x)^2 = C^2 + C^2 z(x)^2$$
|
||||
With a change of notation
|
||||
$$\frac{dz}{dx} = \sqrt{C^2 + C^2 z^2}$$
|
||||
$$\frac{dz}{\sqrt{C^2 + C^2 z^2}} = dx$$
|
||||
$$\int \frac{dz}{\sqrt{1 + z^2}} = \int C\,dx$$
|
||||
With n as the constant of integration
|
||||
$$\sinh^{-1}(z) = xC+ n$$
|
||||
$$z = \sinh(xC + n)$$
|
||||
Substituting back
|
||||
$$dy = \sinh(xC + n) dx$$
|
||||
With h as another constant of integration
|
||||
$$y = \frac{\cosh(xC+ n)}{C} + h dx$$
|
||||
However, n is always zero if we define x=0 as the lowest point of the chain, because
|
||||
$$y'(0) = 0$$
|
||||
$$\sinh(0 + n) = 0$$
|
||||
$$n=0$$
|
||||
So we have $$y = \frac{1}{C}\cosh(xC) + h$$
|
||||
where $C=\frac{\lambda g}{T(x)_x}$.
|
||||
\\
|
||||
b) We have from the given quantities
|
||||
$$x_f - x_i = d$$
|
||||
$$y(x_f) - y(x_i) =\lambda$$
|
||||
and
|
||||
$$\int_{x_{i}}^{x_{f}} \sqrt{1+\sinh(xC)^2} dx = \ell$$
|
||||
Using the hyperbolic trig identity $$\cosh(x)^2-\sinh(x)^2=1$$ this is equivalent to
|
||||
$$\int_{x_{i}}^{x_{f}} \sqrt{\cosh(xC)^2} dx = \ell$$
|
||||
$$\int_{x_{i}}^{x_{f}} \cosh(xC) dx = \ell$$
|
||||
$$\frac{1}{C}(\sinh(x_f C) - \sinh(x_i C)) = \ell$$
|
||||
and substituting the other equation is equivalent to
|
||||
$$\frac{1}{C}(\cosh(x_f C) - \cosh(x_i C)) =\lambda$$
|
||||
Squaring both we get
|
||||
$$\frac{1}{C^2}(\sinh(x_f C)^2 - 2\sinh(x_i C)\sinh(x_f C) + \sinh(x_i C)^2) = \ell^2$$
|
||||
$$\frac{1}{C^2}(\cosh(x_f C)^2 - 2\cosh(x_i C)\cosh(x_f C) + \cosh(x_i C)^2) = \lambda^2$$
|
||||
Subtracting
|
||||
$$\frac{1}{C^2}(-1 +2(\cosh(x_i C)\cosh(x_f C) - \sinh(x_i C)\sinh(x_f C)) -1) = \ell^2 - \lambda^2$$
|
||||
By the identity $\cosh(x)\cosh(y) - \sinh(x)\sinh(y) = \cosh(x-y)$, this is
|
||||
$$(2\cosh(Cd) - 2) = C^2(\ell^2 - \lambda^2)$$
|
||||
which is the required equation.
|
||||
\\
|
||||
\textbf{2.9}
|
||||
\\
|
||||
The support force F is given by the equation $$2F\sin(\arctan(\sinh(Cd))) = \lambda g \ell$$
|
||||
$$2F\tanh(Cd) = \lambda g $$
|
||||
From 2.8 we have
|
||||
$$\frac{1}{C}(\sinh(dC) - \sinh(-dC)) = \ell$$
|
||||
Thus
|
||||
$$F = \frac{\lambda g \sinh(dC)}{C\tanh(dC)}$$
|
||||
$$F= \frac{\lambda g \cosh(dC)}{C}$$
|
||||
This is minimized when $\frac{dF}{dC} = 0$
|
||||
$$\frac{\lambda g (Cd\sinh(Cd) - \cosh(Cd))}{C^2} = 0$$
|
||||
$$Cd\sinh(Cd) - \cosh(Cd) = 0$$
|
||||
$$Cd\sinh(Cd) = \cosh(Cd)$$
|
||||
$$\tanh(Cd) = \frac{1}{Cd}$$
|
||||
Numerically solving this we get
|
||||
$$Cd \approx 1.19968...$$
|
||||
Denoting that number with $\alpha$ we have
|
||||
$$C = \frac{\alpha}{d}$$
|
||||
$$\frac{2d\sinh(\alpha)}{\alpha} = \ell$$
|
||||
\\
|
||||
\textbf{2.10}
|
||||
\\
|
||||
Honestly I have still not managed to solve this problem :/
|
||||
\\
|
||||
\textbf{2.11}
|
||||
\\
|
||||
Consider a number n. We know for every natural number m such that $m < n$ that a force F applied at a distance $\ell$ is equivalent to a force mF applied at a distance $\ell / m$. Now consider a stick with forces F applied upwards at both ends 0 and $\ell$ and a force $2F/(n-1)$ applied at every point $$\frac{\ell}{n}, \frac{2\ell}{n}, \frac{3\ell}{n}... \frac{(n-1)\ell}{n}$$
|
||||
where distances are measured from the left end. The stick does not translate because the net force is zero and it does not rotate by symmetry. Now consider the stick to have a pivot at the left end. Because we know for every natural number m such that $m < n$ that a force F applied at a distance $\ell$ is equivalent to a force mF applied at a distance $\ell / m$, we can simplify the forces acting downward to be equivalent to be a single force acting downward at a distance $\frac{\ell}{n}$ from the left end with a magnitude $$\sum_{k=1}^{n-1} \frac{2Fk}{n-1}$$
|
||||
$$\frac{2F(n-1)n}{2(n-1)}$$
|
||||
$$Fn$$
|
||||
Thus, we see that a force F at a distance $\ell$ is equivalent to a force Fn at a distance $\frac{\ell}{n}$. By induction, this is true for all natural numbers.
|
||||
\\
|
||||
\textbf{2.12}
|
||||
\\
|
||||
If the tension does not point directly along the rope, there is a nonzero unbalanced torque, which the string cannot support because it is completely flexible.
|
||||
\\
|
||||
\textbf{2.13}
|
||||
\\
|
||||
This system is unsolvable. There are three unknowns and two equations.
|
||||
\\
|
||||
\textbf{2.14}
|
||||
\\
|
||||
Let us define L as the distance between the bottom ends of the two sticks and $\lambda$ as their mass density. The left stick has a length of $L\sin(\theta)$. The torque exerted by gravity on the left stick is $$\int_0^{L\sin(\theta)} \lambda g\sin(\theta) x \,dx$$
|
||||
$$\frac{L^2\sin(\theta)^3\lambda g}{2}$$
|
||||
Thus the normal force between the sticks must satisfy $$\frac{L^2\sin(\theta)^3\lambda g}{2} = L\sin(\theta)F_{norm}$$
|
||||
$$F_{norm} = \frac{L\sin(\theta)^2\lambda g}{2}$$
|
||||
Similarly, the torque due to gravity on the right stick is $$\int_0^{L\cos(\theta)} \lambda g\cos(\theta) x \,dx$$
|
||||
$$\frac{L^2\cos(\theta)^3\lambda g}{2}$$
|
||||
Thus the friction force must be
|
||||
$$F_{fric} = \frac{L\cos(\theta)^2\lambda g}{2}$$
|
||||
Thus to not fall we must have
|
||||
$$F_{fric} \leq \mu F_{norm}$$
|
||||
$$\frac{L\cos(\theta)^2\lambda g}{2} \leq frac{L\mu\sin(\theta)^2\lambda g}{2} $$
|
||||
$$\cos(\theta)^2 \leq \mu\sin(\theta)^2$$
|
||||
$$\frac{1}{\mu} \leq \tan(\theta)^2$$
|
||||
$$\theta \geq \arctan{\sqrt{\frac{1}{\mu}}}$$
|
||||
\\
|
||||
\textbf{2.15}
|
||||
\\
|
||||
The torque on the ladder is $$\int_0^L \frac{Mg\cos(\theta) x}{L} \,dx$$
|
||||
$$\frac{Mg\cos(\theta) L}{2} $$
|
||||
Thus the normal force must satisfy
|
||||
$$F_{norm} \frac{\ell}{\tan(\theta)} = \frac{Mg\cos(\theta) L}{2}$$
|
||||
$$F_{norm} = \frac{Mg\sin(\theta)L}{2\ell}$$
|
||||
\\
|
||||
\textbf{2.16}
|
||||
\\
|
||||
Let the stick have a mass density $\lambda(x)$. Let the stick be cut off at the point $x_0$.
|
||||
Thus the torques must balance so we have $$\int_{x_0}^{x_0 + \ell} (x_0 + \ell - x)\lambda(x) g \,dx = \int_{x_0 + \ell}^{\infty} (x - x_0 - \ell)\lambda(x) g \,dx$$
|
||||
$$\int_{x_0}^{x_0 + \ell} (x_0 + \ell)\lambda(x) -x\lambda(x) \,dx = \int_{x_0 + \ell}^{\infty} x\lambda(x) - (x_0 + \ell)\lambda(x) \,dx$$
|
||||
$$\int_{x_0}^{\infty} (x_0 + \ell)\lambda(x) -x\lambda(x) \,dx = 0$$
|
||||
$$\int_{x_0}^{\infty} (x_0 + \ell)\lambda(x)g \,dx =\int_{x_0}^{\infty} x\lambda(x)g \,dx $$
|
||||
Unfinished because i am dumb
|
||||
\\
|
||||
\textbf{2.17}
|
||||
\\
|
||||
a) Balancing forces in the horizontal direction gives $$T\cos(\theta) = F_{frict}$$
|
||||
and balancing torques gives $$rT = R F_{frict}$$
|
||||
Thus $$\frac{rT}{R} = T\cos(\theta)$$
|
||||
$$\theta = \arccos(\frac{r}{R})$$
|
||||
b) $$T \leq \frac{R \mu F_{norm}}{r}$$
|
||||
Thus at the maximum T we have $$T = \frac{R \mu (mg - T\sin(\theta)}{r}$$
|
||||
$$Tr + TR\mu\sin(\theta) = Rmg\mu$$
|
||||
$$T = \frac{Rmg\mu}{r+R\mu\sin(\theta)}$$
|
||||
Using $r=R\cos(\theta)$ this becomes
|
||||
$$T = \frac{Rmg\mu}{R\cos(\theta)+R\mu\sin(\theta)}$$
|
||||
$$T = \frac{mg\mu}{\cos(\theta)+\mu\sin(\theta)}$$
|
||||
c) $$\cos(\theta) = \frac{r}{R}$$
|
||||
$$\sin^2(\theta) + \frac{r^2}{R^2} = 1$$
|
||||
$$\sin(\theta) = \sqrt{1-\frac{r^2}{R^2}}$$
|
||||
$$T = \frac{mg\mu}{\frac{r}{R}+\mu\sqrt{1-\frac{r^2}{R^2}}}$$
|
||||
Simplifying
|
||||
$$T = \frac{Rmg\mu}{r+\mu\sqrt{R^2-r^2}}$$
|
||||
This is minimized when the derivative with respect to r is zero so
|
||||
$$\frac{\delta}{\delta r}(\frac{Rmg\mu}{r+\mu\sqrt{R^2-r^2}}) = 0$$
|
||||
$$-\frac{gmR\mu(1-\frac{r\mu}{\sqrt{R^2-r^2}})}{(\mu\sqrt{R^2-r^2}+r)^2}=0$$
|
||||
$$gmR\mu(\frac{r\mu}{\sqrt{R^2-r^2}}-1) = 0$$
|
||||
$$\sqrt{R^2-r^2} = r\mu$$
|
||||
$$R^2-r^2 = r^2\mu^2$$
|
||||
$$R^2 = r^2(1+\mu^2)$$
|
||||
$$r=\sqrt{\frac{R^2}{1+\mu^2}}$$
|
||||
$$r=\frac{R}{\sqrt{1+\mu^2}}$$
|
||||
\\
|
||||
\textbf{2.18}
|
||||
\\
|
||||
The torque on the stick from gravity is $$\frac{L^2\cos(\theta)\rho g}{2}$$
|
||||
By similar triangles the height of the point of contact off the ground is $$R(1+\cos(\theta))$$
|
||||
Thus on the other triangle $$\sin(\theta) = \frac{R(1+\cos(\theta))}{L}$$
|
||||
so L is $$\frac{R(1+\cos(\theta))}{\sin(\theta)}$$
|
||||
Thus the torque becomes $$\frac{LR(1+\cos(\theta))\cos(\theta)\rho g}{2\sin(\theta)}$$
|
||||
so the normal force must be $$\frac{R(1+\cos(\theta))\cos(\theta)\rho g}{2\sin(\theta)}$$
|
||||
The horizontal component of the normal force is $$\frac{R(1+\cos(\theta))\cos(\theta)
|
||||
\sin(\theta)\rho g}{2\sin(\theta)}$$
|
||||
$$\frac{R(1+\cos(\theta))\cos(\theta)\rho g}{2}$$
|
||||
But the torques must also balance, so the frictional force between the stick and the circle must be the same as between the circle and the ground. Thus we have
|
||||
$$\frac{R(1+\cos(\theta))\cos(\theta)\rho g}{2} = F_{frict}(1+\cos(\theta))$$
|
||||
So the frictional force is $$\frac{R\cos(\theta)\rho g}{2}$$
|
||||
\\
|
||||
\textbf{2.19}
|
||||
\\
|
||||
Denote the torque due to gravity on any one stick $\tau$, the length of any one stick L, and the distance between the bottom of any stick and its point of contact with the previous circle $\ell$. The normal force between the first stick and circle is $$\frac{\tau}{L}$$, which means this is also the normal force between the first circle and the second stick. Balancing the torques on the second stick gives $$\frac{\ell\tau}{L} + \tau = F_{norm}(2)L$$
|
||||
$$F_{norm}(2) = \frac{\tau}{L}(1+\frac{\ell}{L})$$
|
||||
In general
|
||||
$$\ell F_{norm}(n) + \tau = F_{norm}(n+1) L$$
|
||||
$$F_{norm}(n+1) = \frac{\ell F_{norm}(n) + \tau}{L}$$
|
||||
In the limit assuming this goes to a constant value we have
|
||||
$$F_{norm}(\infty) = \frac{\ell F_{norm}(\infty) + \tau}{L}$$
|
||||
$$F_{norm}(\infty)L = \ell F_{norm}(\infty) + \tau$$
|
||||
$$F_{norm}(\infty) = \frac{\tau}{L-\ell}$$
|
||||
By the reasoning of problem 2.18,
|
||||
$$\tau = \frac{L^2\cos(\theta)\rho g}{2}$$
|
||||
$$L =\frac{R(1+\cos(\theta))}{\sin(\theta)}$$
|
||||
By \textit{mysterious geometry}
|
||||
$$\ell = R\tan(\frac{\theta}{2})$$
|
||||
$$F_{norm}(\infty) = \frac{\frac{L^2\cos(\theta)\rho g}{2}}{\frac{R(1+\cos(\theta))}{\sin(\theta)}-R\tan(\frac{\theta}{2})}$$
|
||||
$$F_{norm}(\infty) = \frac{(\frac{R(1+\cos(\theta))}{\sin(\theta)})^2\frac{\cos(\theta)\rho g}{2}}{\frac{R(1+\cos(\theta))}{\sin(\theta)}-\frac{R(1-\cos(\theta))}{\sin(\theta)}}$$
|
||||
$$F_{norm}(\infty) = \frac{\frac{\cos(\theta)\rho g R^2 (1+\cos(\theta))^2}{2\sin^2(\theta)}}{\frac{2R\cos(\theta)}{\sin(\theta)}}$$
|
||||
$$F_{norm}(\infty) = \frac{\rho g R (1+\cos(\theta))^2}{4\sin(\theta)}$$
|
||||
Note: this is not the answer the answer key gives, but somehow they're exactly the same by \textit{mysterious trig identities}.
|
||||
\\
|
||||
\textbf{3.1}
|
||||
\\
|
||||
In all honesty i have this equation memorized
|
||||
$$a_1 = a_2 = g\frac{m_2 - m_1}{m_1 + m_2}$$
|
||||
$$T = g\frac{2m_1m_2}{m_1+m_2}$$
|
||||
:)
|
||||
\\
|
||||
\textbf{3.2}
|
||||
\\
|
||||
Equations:
|
||||
$$T_1 - m_1 g = m_1a_1$$
|
||||
$$T_2 - m_2 g = m_2a_2$$
|
||||
$$T_2 - m_3 g= m_3a_3$$
|
||||
$$T_1 = 2T_2$$
|
||||
$$2a_1 + a_2 = -a_3$$
|
||||
Substitute 4 and 5 into 1, 2 and 3:
|
||||
$$2T_2 - m_1a_1 = m_1g$$
|
||||
$$T_2 - m_2a_2 = m_2g$$
|
||||
$$T_2 + (2a_1+a_2)(m_3) = m_3g$$
|
||||
Subtract 7 from 8:
|
||||
$$(2a_1+a_2)(m_3) + m_2a_2 = (m_3-m_2)g$$
|
||||
$$a_1 = \frac{(m_3-m_2)g - (m_3+m_2)a_2}{2m_3}$$
|
||||
Substitute 10 into 6:
|
||||
$$2T_2 - m_1\frac{(m_3-m_2)g - (m_3+m_2)a_2}{2m_3} = m_1g$$
|
||||
Simplify:
|
||||
$$4T_2m_3 - m_1(m_3-m_2)g - m_1(m_3+m_2)a_2 = 2m_3m_1g$$
|
||||
$$4T_2m_3 = m_1(m_3-m_2)g + m_1(m_3+m_2)a_2 + 2m_3m_1g$$
|
||||
$$4T_2m_3 = m_1(3m_3-m_2)g + m_1(m_3+m_2)a_2$$
|
||||
$$T_2 = \frac{m_1(3m_3-m_2)g + m_1(m_3+m_2)a_2}{4m_3}$$
|
||||
Substitute into 7:
|
||||
$$\frac{m_1(3m_3-m_2)g + m_1(m_3+m_2)a_2}{4m_3} - m_2a_2 = m_2g$$
|
||||
$$m_1(3m_3-m_2)g + m_1(m_3+m_2)a_2 - 4m_3m_2a_2 = 4m_3m_2g$$
|
||||
$$a_2 = \frac{4m_3m_2g - m_1(3m_3-m_2)g}{m_1(m_3+m_2) - 4m_3m_2}$$
|
||||
\\
|
||||
\textbf{3.3}
|
||||
\\
|
||||
uh
|
||||
wtf
|
||||
\\
|
||||
\textbf{3.4}
|
||||
\\
|
||||
For the two on the ends,
|
||||
$$T - mg = ma_1$$
|
||||
For the ones in the middle,
|
||||
$$2T - mg = ma_2$$
|
||||
And conservation of string gives
|
||||
$$-Na_2 = a_1$$
|
||||
Solving
|
||||
$$2T - 2mg = 2ma_1$$
|
||||
$$mg = m(a_2-2a_1)$$
|
||||
$$g = a_2+2Na_2$$
|
||||
$$a_2 = \frac{g}{1+2N}$$
|
||||
$$a_1 = \frac{-Ng}{1+2N}$$
|
||||
\\
|
||||
\textbf{3.5}
|
||||
\\
|
||||
$$2T - m_ig = m_ia_i$$
|
||||
$$\sum_{i=1}^N a_i = 0$$
|
||||
$$\sum_{i=1}^N \frac{2T - m_ig}{m_i} = 0$$
|
||||
$$\sum_{i=1}^N \frac{2T}{m_i} = Ng$$
|
||||
$$\sum_{i=1}^N \frac{1}{m_i} = \frac{Ng}{2T}$$
|
||||
Define the reduced mass $$M := \frac{1}{\sum_{i=1}^N \frac{1}{m_i}}$$
|
||||
Then $$T = \frac{NMg}{2}$$
|
||||
$$NMg - m_ig = m_ia_i$$
|
||||
$$a_i = \frac{NMg-m_ig}{m_i}$$
|
||||
\\
|
||||
\textbf{3.6}
|
||||
\\
|
||||
a)
|
||||
$$\Delta x = \frac{at^2}{2}$$
|
||||
$$mg\sin(\theta) = ma$$
|
||||
$$\Delta x = \frac{g\sin(\theta)t^2}{2}$$
|
||||
$$\Delta x_h = \frac{g\sin(\theta)\cos(\theta)t^2}{2}$$
|
||||
$$\frac{d}{d\theta}(x_h) = \frac{gt^2}{2}(\cos^2(\theta)-\sin^2(\theta)) = 0$$
|
||||
$$\cos^2(\theta) = \sin^2(\theta)$$
|
||||
$$\cos(\theta) = \sin(\theta)$$
|
||||
$$\theta = \frac{\pi}{2}$$
|
||||
b)
|
||||
$$\Delta x = \frac{at^2}{2}$$
|
||||
$$mg\sin(\theta)-\mu mg\cos(\theta) = ma$$
|
||||
$$\Delta x = \frac{g(\sin(\theta)-\mu\cos(\theta))t^2}{2}$$
|
||||
$$\Delta x_h = \frac{g(\sin(\theta)-\mu\cos(\theta))\cos(\theta)t^2}{2}$$
|
||||
$$\frac{d}{d\theta}(x_h) = \frac{gt^2}{2}((\cos(\theta)+\mu\sin(\theta))\cos(\theta) - (\sin(\theta)-\mu\cos(\theta))\sin(\theta)) = 0$$
|
||||
$$\cos^2(\theta) + 2\mu\cos(\theta)\sin(\theta) - \sin^2(\theta)=0$$
|
||||
$$\cos(2\theta) +\mu\sin(2\theta) = 0$$
|
||||
$$\tan(2\theta) = -\frac{1}{\mu}$$
|
||||
$$2\theta = \arctan(-\frac{1}{\mu})$$
|
||||
$$\theta = \frac{\arctan(-\frac{1}{\mu})}{2}$$
|
||||
\\
|
||||
\textbf{3.7}
|
||||
\\
|
||||
At the beginning, $v_\perp$ is V and $v_\parallel$ is 0.
|
||||
The total force of friction is $$\mu mg\cos(\theta)$$
|
||||
$$mg\sin(\theta)$$
|
||||
$$F_{frict\perp} = mg\sin(\theta)\sin(\arctan(\frac{v_\perp}{v_\parallel}))$$
|
||||
$$F_{frict\perp} = mg\sin(\theta)\frac{\frac{v_\perp}{v_\parallel}}{\sqrt{\frac{v_\perp}{v_\parallel}^2 + 1}}$$
|
||||
$$F_{frict\parallel} = mg\sin(\theta)\cos(\arctan(\frac{v_\perp}{v_\parallel}))$$
|
||||
$$F_{frict\parallel} = mg\sin(\theta)\frac{1}{\sqrt{\frac{v_\perp}{v_\parallel}^2 + 1}}$$
|
||||
$$\frac{d}{dt}(v_\perp) =-g\sin(\theta)\frac{\frac{v_\perp}{v_\parallel}}{\sqrt{\frac{v_\perp}{v_\parallel}^2 + 1}}$$
|
||||
$$\frac{d}{dt}(v_\parallel) =g\sin(\theta)(1-\frac{1}{\sqrt{\frac{v_\perp}{v_\parallel}^2 + 1}}) = g\sin(\theta)\frac{\sqrt{\frac{v_\perp}{v_\parallel}^2+1}-1}{\sqrt{\frac{v_\perp}{v_\parallel}^2+1}}$$
|
||||
$$\frac{d}{dt}(v) = \frac{d}{dt}(\sqrt{v_\perp^2+v_\parallel^2}) =\frac{v_\perp\frac{d}{dt}(v_\perp)+v_\parallel\frac{d}{dt}(v_\parallel)}{\sqrt{v_\perp^2+v_\parallel^2}}$$
|
||||
$$\frac{d}{dt}(v) = \frac{g\sin(\theta)}{\sqrt{\frac{v_\perp}{v_\parallel}^2+1}\sqrt{v_\perp^2+v_\parallel^2}}(v_\parallel(\sqrt{\frac{v_\perp}{v_\parallel}^2+1}-1) - v_\perp\frac{v_\perp}{v_\parallel})$$
|
||||
$$\frac{d}{dt}(v) = \frac{g\sin(\theta)v_\parallel}{\sqrt{\frac{v_\perp}{v_\parallel}^2+1}\sqrt{v_\perp^2+v_\parallel^2}}(\sqrt{\frac{v_\perp}{v_\parallel}^2+1}-(1+ \frac{v_\perp}{v_\parallel}^2))$$
|
||||
$$\frac{d}{dt}(v) = \frac{g\sin(\theta)v_\parallel(1-\sqrt{\frac{v_\perp}{v_\parallel}^2+1})}{\sqrt{v_\perp^2+v_\parallel^2}}$$
|
||||
$$\frac{d}{dt}(v) = \frac{g\sin(\theta)(1-\sqrt{\frac{v_\perp}{v_\parallel}^2+1})}{\sqrt{\frac{v_\perp}{v_\parallel}^2+1}} = -\frac{d}{dt}(v_\parallel)$$
|
||||
$$v + v_\parallel = c$$
|
||||
$$V+0 = c$$
|
||||
$$c=V$$
|
||||
$$v + v_\parallel = V$$
|
||||
After a very long time all of the block's velocity is in the direction parallel to the plane so
|
||||
$$2v_\parallel = V$$
|
||||
$$v_\parallel = \frac{V}{2}$$
|
||||
\\
|
||||
\textbf{3.8}
|
||||
\\
|
||||
Define $F_{norm}$ as the force between the block and the plane.
|
||||
Equations of motion:
|
||||
$$F_{norm}\sin(\theta) = -Ma_{px}$$
|
||||
$$F_{norm}\sin(\theta) = ma_{bx}$$
|
||||
$$F_{norm}\cos(\theta) - mg = ma_{by}$$
|
||||
$$\frac{-a_{by}}{a_{bx}-a_{px}} = \tan(\theta)$$
|
||||
$$\frac{\frac{F_{norm}\cos(\theta) - mg}{m}}{\frac{F_{norm}\sin(\theta)}{m} +\frac{F_{norm}\sin(\theta)}{M}} = \tan(\theta)$$
|
||||
$$\frac{\frac{F_{norm}\cos(\theta) - mg}{m}}{\frac{F_{norm}\sin(\theta)(M+m)}{mM}} = \tan(\theta)$$
|
||||
$$\frac{F_{norm}\cos(\theta)M-mMg}{F_{norm}\sin(\theta)(M+m)} = \tan(\theta)$$
|
||||
$$F_{norm}(\cos(\theta)M-\sin(\theta)(M+m)\tan(\theta)) = mMg$$
|
||||
$$F_{norm} = \frac{mMg}{(\cos(\theta)M-\sin(\theta)(M+m)\tan(\theta))}$$
|
||||
$$a_{px} = -\frac{mg\sin(\theta)}{(\cos(\theta)M-\sin(\theta)(M+m)\tan(\theta))}$$
|
||||
\\
|
||||
\textbf{3.9}
|
||||
\\
|
||||
$$F(t) = ma_0e^{-bt}$$
|
||||
$$x''(t) = a_0e^{-bt}$$
|
||||
$$x'(t) = \frac{-a_0e^{-bt}}{b} + \alpha$$
|
||||
$$0 = \frac{-a_0}{b} + \alpha$$
|
||||
$$x'(t) = \frac{-a_0e^{-bt}}{b}+\frac{a_0}{b}$$
|
||||
$$x(t) = \frac{a_0e^{-bt}}{b^2}+\frac{a_0t}{b}+\beta$$
|
||||
$$0 = \frac{a_0}{b^2} + \beta$$
|
||||
$$x(t) = \frac{a_0e^{-bt}}{b^2}+\frac{a_0t}{b}-\frac{a_0}{b^2}$$
|
||||
\\
|
||||
\textbf{3.10}
|
||||
\\
|
||||
$$F(x) = -kx$$
|
||||
$$mv \frac{dv}{dx} = -kx$$
|
||||
$$mv \,dv = -kx \,dx$$
|
||||
$$\frac{mv^2}{2} = \frac{-kx^2}{2}$$
|
||||
$$v = \sqrt{\frac{-kx^2}{m}}$$
|
||||
$$\sqrt{\frac{-m}{kx^2}}\,dx = dt$$
|
||||
$$(\sqrt{\frac{-m}{k}})\frac{1}{x}\,dx = \,dt$$
|
||||
$$(\sqrt{\frac{-m}{k}})\ln(x) = t$$
|
||||
$$\ln(x) = \sqrt{\frac{-t^2k}{m}}$$
|
||||
$$x = x_0e^{t\sqrt{\frac{-k}{m}}}$$
|
||||
$$x = x_0\cos(t\sqrt{\frac{k}{m}})$$
|
||||
\\
|
||||
\textbf{3.11}
|
||||
\\
|
||||
$$F = y(t)\lambda g$$
|
||||
$$a = \frac{y(t)\lambda g}{\ell \lambda} = \frac{y(t)g}{\ell}$$
|
||||
$$y''(t) = \frac{g}{\ell} y(t)$$
|
||||
$$y(t) = \alpha e^{t\sqrt{\frac{g}{\ell}}} + \alpha e^{-t\sqrt{\frac{g}{\ell}}}$$
|
||||
$$y'(t) = \sqrt{\frac{g}{\ell}}\alpha e^{t\sqrt{\frac{g}{\ell}}} + \sqrt{\frac{g}{\ell}}\beta e^{-t\sqrt{\frac{g}{\ell}}}$$
|
||||
$$ \alpha + \beta = y_0$$
|
||||
$$\sqrt{\frac{g}{\ell}}\alpha - \sqrt{\frac{g}{\ell}}\beta = 0$$
|
||||
$$ \alpha = \beta = \frac{y+0}{2}$$
|
||||
$$y(t) = y_0\frac{e^{\sqrt{\frac{g}{\ell}}t}+e^{-\sqrt{\frac{g}{\ell}}t}}{2} = y_0\cosh(\sqrt{\frac{g}{\ell}}t)$$
|
||||
\\
|
||||
\textbf{3.12}
|
||||
\\
|
||||
Note to self: finish problem
|
||||
$$F(v) = mg-m\alpha v$$
|
||||
$$g - \alpha v = \frac{dv}{dt}$$
|
||||
$$dt = \frac{dv}{g-\alpha v}$$
|
||||
$$t = \frac{-\ln(g-\alpha v)}{\alpha} + c$$
|
||||
$$0 = \frac{-\ln(g-\alpha v_0)}{\alpha} + c$$
|
||||
$$c\alpha = \ln(g-\alpha v_0)$$
|
||||
$$c = \frac{\ln(g-\alpha v_0)}{\alpha}$$
|
||||
$$-t\alpha = \ln(g-\alpha v) - \ln(g-\alpha v_0)$$
|
||||
$$e^{-t\alpha} = \frac{g-\alpha v}{g-\alpha v_0}$$
|
||||
$$e^{-t\alpha}(g-\alpha v_0) = g - \alpha v $$
|
||||
$$\frac{g - e^{-t\alpha}(g-\alpha v_0)}{\alpha} = v$$
|
||||
$$\frac{g - e^{-t\alpha}g+e^{-t\alpha}\alpha v_0}{\alpha} = v$$
|
||||
$$x = \frac{gt + \frac{e^{-t\alpha}g-e^{-t\alpha}\alpha v_0}{\alpha}}{\alpha} + c$$
|
||||
$$x = \frac{\alpha gt + e^{-t\alpha}g-e^{-t\alpha}\alpha v_0}{\alpha^2} + c$$
|
||||
$$0 = \frac{g-\alpha v_0}{\alpha^2} + c$$
|
||||
$$x = \frac{\alpha gt + e^{-t\alpha}g-e^{-t\alpha}\alpha v_0 - g + \alpha v_0}{\alpha^2}$$
|
||||
$$x = \frac{\alpha gt + e^{-t\alpha}(g-\alpha v_0) - (g - \alpha v_0)}{\alpha^2}$$
|
||||
$$x = \frac{\alpha gt + (e^{-t\alpha} - 1)(g - \alpha v_0)}{\alpha^2}$$
|
||||
\\
|
||||
\textbf{3.13}
|
||||
\\
|
||||
a) $$\tau = mg\ell\sin(\theta) \approx mg\ell\theta$$
|
||||
$$m\ell^2\theta''(t) = mg\ell\theta(t)$$
|
||||
$$\theta''(t) = \frac{g}{\ell}\theta(t)$$
|
||||
The general solution is
|
||||
$$\theta(t) = \alpha e^{t\sqrt{\frac{g}{\ell}}} + \beta e^{-t\sqrt{\frac{g}{\ell}}}$$
|
||||
Using the initial conditions
|
||||
$$\theta_0 = \alpha + \beta$$
|
||||
$$\theta'(t)= \sqrt{\frac{g}{\ell}}(\alpha e^{t\sqrt{\frac{g}{\ell}}} - \beta e^{-t\sqrt{\frac{g}{\ell}}})$$
|
||||
$$\omega_0 = \sqrt{\frac{g}{\ell}}(\alpha - \beta)$$
|
||||
$$\alpha = \theta_0 - \beta$$
|
||||
$$\omega_0 = \sqrt{\frac{g}{\ell}}(\theta_0 - 2\beta)$$
|
||||
$$\beta = \frac{1}{2}(\theta_0 - \omega_0\sqrt{\frac{\ell}{g}})$$
|
||||
$$\alpha = \frac{1}{2}(\theta_0 + \omega_0\sqrt{\frac{\ell}{g}})$$
|
||||
$$\theta(t) = \frac{1}{2}(\theta_0 + \omega_0\sqrt{\frac{\ell}{g}}) e^{t\sqrt{\frac{g}{\ell}}} +\frac{1}{2}(\theta_0 - \omega_0\sqrt{\frac{\ell}{g}}) e^{-t\sqrt{\frac{g}{\ell}}}$$
|
||||
b) $$(\ell\theta_0)(m\ell\omega_0) \geq \hbar$$
|
||||
$$\omega_0 \geq \frac{\hbar}{m\ell^2\theta_0}$$
|
||||
Because $\alpha$ and $\beta$ are both so small, the negative exponential term is neglibigle, so we have
|
||||
$$\theta(t) = \frac{1}{2}(\theta_0 + \frac{\hbar}{m\ell^2\theta_0}\sqrt{\frac{\ell}{g}}) e^{t\sqrt{\frac{g}{\ell}}}$$
|
||||
So we must maximize the coefficient
|
||||
$$\theta_0 + \frac{\hbar}{m\ell^2\theta_0}\sqrt{\frac{\ell}{g}}$$
|
||||
Thus
|
||||
$$1 - \frac{\hbar}{m\ell^2\theta_0^2}\sqrt{\frac{\ell}{g}} = 0$$
|
||||
$$\frac{\hbar}{m\ell^2}\sqrt{\frac{\ell}{g}} = \theta_0^2$$
|
||||
$$\sqrt{\frac{\hbar}{m\ell^2}\sqrt{\frac{\ell}{g}}} = \theta_0$$
|
||||
$$1 = \sqrt{\frac{\hbar}{m\ell^2}\sqrt{\frac{\ell}{g}}} e^{t\sqrt{\frac{g}{\ell}}}$$
|
||||
$$\sqrt{\frac{m\ell^2}{\hbar}\sqrt{\frac{g}{\ell}}} = e^{t\sqrt{\frac{g}{\ell}}}$$
|
||||
$$\ln(\sqrt{\frac{m\ell^2}{\hbar}\sqrt{\frac{g}{\ell}}}) = t\sqrt{\frac{g}{\ell}}$$
|
||||
$$t = \frac{\ln(\frac{m^2\ell^3g}{\hbar^2})}{4\sqrt{\frac{g}{\ell}}}$$
|
||||
$$t \approx 3.5 \,sec$$
|
||||
\\
|
||||
\textbf{3.14}
|
||||
\\
|
||||
$$x = v\cos(\theta)t$$
|
||||
$$y = v\sin(\theta)t - \frac{1}{2}gt^2$$
|
||||
$$t = \frac{x}{v\cos(\theta)}$$
|
||||
$$y = v\sin(\theta)\frac{x}{v\cos(\theta)} - \frac{1}{2}g\frac{x^2}{v^2\cos(\theta)^2}$$
|
||||
$$y = x\tan(\theta) - \frac{gx^2}{2v^2\cos(\theta)^2}$$
|
||||
$$0 = x\tan(\theta) - \frac{gx^2}{2v^2\cos(\theta)^2}$$
|
||||
$$\tan(\theta) = \frac{gx}{2v^2\cos(\theta)^2}$$
|
||||
$$\frac{2v^2\sin(\theta)\cos(\theta)}{g} = x_f$$
|
||||
$$\int_0^{x_f} x\tan(\theta) - \frac{gx^2}{2v^2\cos(\theta)^2}\,dx$$
|
||||
$$|\frac{x^2\tan(\theta)}{2} - \frac{gx^3}{6v^2\cos(\theta)^2}|_0^{x_f}$$
|
||||
$$\frac{\tan(\theta)}{2}(\frac{2v^2\sin(\theta)\cos(\theta)}{g})^2 - \frac{g}{6v^2\cos(\theta)^2}(\frac{2v^2\sin(\theta)\cos(\theta)}{g})^3$$
|
||||
$$\frac{2\sin^3(\theta)\cos(\theta)v^4}{g^2} - \frac{4\sin^3(\theta)\cos(\theta)}{3}$$
|
||||
$$\frac{2\sin^3(\theta)\cos(\theta)v^4}{3g^2}$$
|
||||
$$\frac{d}{dx}(\frac{2\sin^3(\theta)\cos(\theta)v^4}{3g^2}) = 0$$
|
||||
$$(3\sin^2(\theta)\cos^2(\theta) - \sin^4(\theta))\frac{2v^4}{3g^2}=0$$
|
||||
$$3\sin^2(\theta)\cos^2(\theta)=\sin^4(\theta)$$
|
||||
$$3\cos^2(\theta) =\sin^2(\theta)$$
|
||||
$$\tan(\theta) = \sqrt{3}$$
|
||||
$$\theta = \frac{\pi}{3}$$
|
||||
$$A_{max}=\frac{2\sin^3(\frac{\pi}{3})\cos(\frac{\pi}{3})v^4}{3g^2}$$
|
||||
$$A_{max}=\frac{\sqrt{3}v^4}{8g^2}$$
|
||||
\end{document}
|
||||
240
revolvingStick.html
Normal file
240
revolvingStick.html
Normal file
@@ -0,0 +1,240 @@
|
||||
<!--
|
||||
This work is licensed under CC BY-NC-ND 4.0
|
||||
Link to license: http://creativecommons.org/licenses/by-nc-nd/4.0/
|
||||
Attribute to Russell Georgi
|
||||
-->
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=UTF8">
|
||||
<title>
|
||||
Revolving Stick
|
||||
</title>
|
||||
<style>
|
||||
html, body {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
margin: 0px;
|
||||
border: 0;
|
||||
overflow: hidden;
|
||||
display: block;
|
||||
}
|
||||
|
||||
canvas {
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.greenSlider {
|
||||
-webkit-appearance: none;
|
||||
border-radius: 5px;
|
||||
height: 10px;
|
||||
background: #d3d3d3;
|
||||
outline: none;
|
||||
opacity: 0.7;
|
||||
-webkit-transition: .2s;
|
||||
transition: opacity .2s;
|
||||
|
||||
}
|
||||
|
||||
.greenSlider::-webkit-slider-thumb {
|
||||
-webkit-appearance: none;
|
||||
appearance: none;
|
||||
background: #000000;
|
||||
border-radius: 50%;
|
||||
width: 15px;
|
||||
height: 15px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.greenSlider::-moz-range-thumb {
|
||||
background: #000000;
|
||||
border-radius: 50%;
|
||||
width: 15px;
|
||||
height: 15px;
|
||||
cursor: pointer;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<canvas id="myCanvas" width="1" height="1" style="border:1px solid #ffffff;">
|
||||
Your browser does not support the HTML5 canvas tag.</canvas>
|
||||
<div class="slidecontainer">
|
||||
<t>Theta</t>
|
||||
<input type="range" min="0.01" max="1.57" value="0.52" step="0.01" class="greenSlider" id="wRSlider">
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var c = document.getElementById("myCanvas");
|
||||
var ctx = c.getContext("2d");
|
||||
c.width = window.innerWidth;
|
||||
c.height = window.innerHeight;
|
||||
//Time step
|
||||
var dt = 0.01;
|
||||
var t = 0;
|
||||
var l = 100;
|
||||
var theta = 0.52;
|
||||
var m = 1;
|
||||
var g = 98;
|
||||
var w = Math.sqrt(3 * g / (2 * l * Math.cos(theta)));
|
||||
var vectorMultiplier = 25;
|
||||
var cTwo = 0.2;
|
||||
//Relative position of canvas
|
||||
var xPos = 0;
|
||||
var yPos = 0;
|
||||
//Moves and scales canvas
|
||||
ctx.translate(ctx.canvas.width / 2, ctx.canvas.height / 2)
|
||||
ctx.scale(2, -2);
|
||||
|
||||
function fnx(x, y, z)
|
||||
{
|
||||
return (x + y) / Math.SQRT2;
|
||||
}
|
||||
|
||||
function fny(x, y, z)
|
||||
{
|
||||
return z + cTwo * (y - x);
|
||||
}
|
||||
|
||||
wRSlider.oninput = function()
|
||||
{
|
||||
theta = parseFloat(this.value);
|
||||
w = Math.sqrt(3 * g / (2 * l * Math.cos(theta)));
|
||||
}
|
||||
|
||||
function Clear(ctx)
|
||||
{
|
||||
ctx.clearRect(-c.width, -c.height, c.width * 2, c.height * 2);
|
||||
}
|
||||
|
||||
function Update()
|
||||
{
|
||||
Clear(ctx);
|
||||
Draw();
|
||||
t += dt;
|
||||
setTimeout(Update, 1);
|
||||
}
|
||||
|
||||
function Reset()
|
||||
{
|
||||
t = 0;
|
||||
rp = 0;
|
||||
thetap = 0;
|
||||
theta = Math.PI / 18;
|
||||
r = 100;
|
||||
}
|
||||
|
||||
function Draw()
|
||||
{
|
||||
ctx.lineWidth = 1;
|
||||
ctx.strokeStyle = "#000000";
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(xPos + fnx(0, 0, 0), yPos + fny(0, 0, 0));
|
||||
ctx.lineTo(
|
||||
xPos + fnx(l * Math.sin(theta) * Math.cos(t * w), - l * Math.sin(theta) * Math.sin(t * w), - l * Math.cos(theta)),
|
||||
yPos + fny(l * Math.sin(theta) * Math.cos(t * w), - l * Math.sin(theta) * Math.sin(t * w), - l * Math.cos(theta))
|
||||
);
|
||||
ctx.stroke();
|
||||
iStep = Math.PI / 100;
|
||||
ctx.lineWidth = 0.2;
|
||||
ctx.strokeStyle = "#888888";
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(
|
||||
xPos + fnx(l * Math.sin(theta) * Math.cos(0), - l * Math.sin(theta) * Math.sin(0), - l * Math.cos(theta)),
|
||||
yPos + fny(l * Math.sin(theta) * Math.cos(0), - l * Math.sin(theta) * Math.sin(0), - l * Math.cos(theta))
|
||||
);
|
||||
for (i = 0; i <= Math.PI * 2; i += iStep)
|
||||
{
|
||||
ctx.lineTo(
|
||||
xPos + fnx(l * Math.sin(theta) * Math.cos(i), - l * Math.sin(theta) * Math.sin(i), - l * Math.cos(theta)),
|
||||
yPos + fny(l * Math.sin(theta) * Math.cos(i), - l * Math.sin(theta) * Math.sin(i), - l * Math.cos(theta))
|
||||
);
|
||||
}
|
||||
ctx.stroke();
|
||||
ctx.lineWidth = 1;
|
||||
ctx.strokeStyle = "#ff0000";
|
||||
vector(
|
||||
fnx(0, 0, 0),
|
||||
fny(0, 0, 0),
|
||||
fnx(0, 0, w * vectorMultiplier),
|
||||
fny(0, 0, w * vectorMultiplier),
|
||||
w * vectorMultiplier/ 8,
|
||||
"#ff0000"
|
||||
);
|
||||
ctx.scale(1, -1);
|
||||
ctx.beginPath();
|
||||
ctx.fillText("ω", fnx(0, 0, w * vectorMultiplier + 5), -fny(0, 0, w * vectorMultiplier + 5));
|
||||
ctx.fill();
|
||||
ctx.scale(1, -1);
|
||||
ctx.lineWidth = 1;
|
||||
ctx.strokeStyle = "#00ff00";
|
||||
am = m * l * l * w * Math.sin(theta) / 200;
|
||||
vector(
|
||||
fnx(0, 0, 0),
|
||||
fny(0, 0, 0),
|
||||
fnx(am * Math.cos(theta) * Math.cos(t * w), - am * Math.cos(theta) * Math.sin(t * w), am * Math.sin(theta)),
|
||||
fny(am * Math.cos(theta) * Math.cos(t * w), - am * Math.cos(theta) * Math.sin(t * w), am * Math.sin(theta)),
|
||||
am / 8,
|
||||
"#00ff00"
|
||||
);
|
||||
ctx.scale(1, -1);
|
||||
ctx.beginPath();
|
||||
ctx.fillText(
|
||||
"L",
|
||||
fnx(am * Math.cos(theta) * Math.cos(t * w), - am * Math.cos(theta) * Math.sin(t * w), am * Math.sin(theta) + 5),
|
||||
-fny(am * Math.cos(theta) * Math.cos(t * w), - am * Math.cos(theta) * Math.sin(t * w), am * Math.sin(theta) + 5)
|
||||
);
|
||||
ctx.fill();
|
||||
ctx.scale(1, -1);
|
||||
/*
|
||||
vector(
|
||||
fnx(l * Math.sin(theta) * Math.cos(t * w) / 2, - l * Math.sin(theta) * Math.sin(t * w) / 2, - l * Math.cos(theta) / 2),
|
||||
fny(l * Math.sin(theta) * Math.cos(t * w) / 2, - l * Math.sin(theta) * Math.sin(t * w) / 2, - l * Math.cos(theta) / 2),
|
||||
fnx(
|
||||
am * Math.cos(theta) * Math.cos(t * w) + l * Math.sin(theta) * Math.cos(t * w) / 2,
|
||||
-am * Math.cos(theta) * Math.sin(t * w) - l * Math.sin(theta) * Math.sin(t * w) / 2,
|
||||
am * Math.sin(theta) - l * Math.cos(theta) / 2
|
||||
),
|
||||
fny(
|
||||
am * Math.cos(theta) * Math.cos(t * w) + l * Math.sin(theta) * Math.cos(t * w) / 2,
|
||||
-am * Math.cos(theta) * Math.sin(t * w) - l * Math.sin(theta) * Math.sin(t * w) / 2,
|
||||
am * Math.sin(theta) - l * Math.cos(theta) / 2
|
||||
),
|
||||
8,
|
||||
"#00ff00"
|
||||
);
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
window.addEventListener('resize', function(event) {
|
||||
c.width = window.innerWidth;
|
||||
c.height = window.innerHeight;
|
||||
ctx.translate(c.width / 2, c.height / 2);
|
||||
ctx.scale(2, -2);
|
||||
}, true);
|
||||
|
||||
function vector(xv, yv, xvv, yvv, va, cl)
|
||||
{
|
||||
vl = ((xvv - xv) ** 2 + Math.pow(yvv - yv, 2)) ** (1/2);
|
||||
ctx.strokeStyle = cl;
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(xPos + xv, yPos + yv);
|
||||
ctx.lineTo(xPos + xvv, yPos + yvv);
|
||||
ctx.stroke();
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(xPos + xvv, yPos + yvv);
|
||||
ctx.lineTo(xPos + xvv - va / vl * (xvv - xv) + va / vl / 2 * (yvv - yv), yPos + yvv - va / vl * (yvv - yv) - va / vl / 2 * (xvv - xv));
|
||||
ctx.stroke();
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(xPos + xvv, yPos + yvv);
|
||||
ctx.lineTo(xPos + xvv - va / vl * (xvv - xv) - va / vl / 2 * (yvv - yv), yPos + yvv - va / vl * (yvv - yv) + va / vl / 2 * (xvv - xv));
|
||||
ctx.stroke();
|
||||
}
|
||||
|
||||
Update();
|
||||
|
||||
</script>
|
||||
</body>
|
||||
<p xmlns:cc="http://creativecommons.org/ns#" style="font-size: 1vw; bottom: 0px; position: absolute;">
|
||||
This work is licensed under
|
||||
<a href="http://creativecommons.org/licenses/by-nc-nd/4.0/?ref=chooser-v1" target="_blank" rel="license noopener noreferrer" style="display:inline-block;">CC BY-NC-ND 4.0<img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/nc.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/nd.svg?ref=chooser-v1"></a></p>
|
||||
</html>
|
||||
152
springPendulum.html
Normal file
152
springPendulum.html
Normal file
@@ -0,0 +1,152 @@
|
||||
<!--
|
||||
This work is licensed under CC BY-NC-ND 4.0
|
||||
Link to license: http://creativecommons.org/licenses/by-nc-nd/4.0/
|
||||
Attribute to Russell Georgi
|
||||
-->
|
||||
<html>
|
||||
<head>
|
||||
<title>
|
||||
Spring Pendulum Example
|
||||
</title>
|
||||
<style>
|
||||
html, body {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
margin: 0px;
|
||||
border: 0;
|
||||
overflow: hidden;
|
||||
display: block;
|
||||
}
|
||||
|
||||
canvas {
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
t {
|
||||
position: absolute;
|
||||
font-size: 75px;
|
||||
left: 5%;
|
||||
top: 5%;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<canvas id="myCanvas" width="1" height="1" style="border:1px solid #ffffff;">
|
||||
Your browser does not support the HTML5 canvas tag.</canvas>
|
||||
<!--t id="time">0</t-->
|
||||
|
||||
<script>
|
||||
var c = document.getElementById("myCanvas");
|
||||
var ctx = c.getContext("2d");
|
||||
c.width = window.innerWidth;
|
||||
c.height = window.innerHeight;
|
||||
//Time step
|
||||
var dt = 0.02;
|
||||
var t = 0;
|
||||
var g = 98;
|
||||
var l = 200;
|
||||
var x = 0;
|
||||
var xp = 0;
|
||||
var theta = Math.PI / 8;
|
||||
var thetap = 0;
|
||||
var m = 1;
|
||||
var k = 2;
|
||||
//Relative position of canvas
|
||||
var xPos = 0;
|
||||
var yPos = 200;
|
||||
//Moves and scales canvas
|
||||
ctx.translate(ctx.canvas.width / 2, ctx.canvas.height / 2)
|
||||
ctx.scale(1, -1);
|
||||
|
||||
function Clear(ctx)
|
||||
{
|
||||
ctx.clearRect(-c.width, -c.height, c.width * 2, c.height * 2);
|
||||
}
|
||||
|
||||
function Update()
|
||||
{
|
||||
Clear(ctx);
|
||||
Draw();
|
||||
t += dt;
|
||||
xp += (m * (l + x) * thetap * thetap + m * g * Math.cos(theta) - k * x) * dt / m;
|
||||
thetap += (-m * g * Math.sin(theta) - 2 * m * xp * thetap) * dt / (m * (l + x));
|
||||
x += xp * dt;
|
||||
theta += thetap * dt;
|
||||
setTimeout(Update, 1);
|
||||
}
|
||||
|
||||
function Reset()
|
||||
{
|
||||
theta = 0;
|
||||
x = 0;
|
||||
thetap = 0;
|
||||
xp = 0;
|
||||
t = 0;
|
||||
}
|
||||
|
||||
function Draw()
|
||||
{
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(-c.width, yPos);
|
||||
ctx.lineTo(c.width, yPos);
|
||||
ctx.stroke();
|
||||
drawSpring(xPos, 0, xPos + (l + x) * Math.sin(theta), - (l + x) * Math.cos(theta), 1, 3, 10, 10);
|
||||
ctx.beginPath();
|
||||
ctx.arc(xPos + (l + x) * Math.sin(theta), yPos - (l + x) * Math.cos(theta), 10, 0, Math.PI * 2);
|
||||
ctx.fill();
|
||||
}
|
||||
|
||||
function drawSpring(x1, y1, x2, y2, a, b, perpSize, numLoops, tStep = 0.1)
|
||||
{
|
||||
ctx.translate(0, yPos);
|
||||
if (Math.sign(theta) == 1)
|
||||
{
|
||||
ctx.rotate(Math.atan((y2 - y1) / (x2 - x1)) * (Math.sign(theta)));
|
||||
} else
|
||||
{
|
||||
ctx.rotate(Math.PI - Math.atan((y2 - y1) / (x2 - x1)) * (Math.sign(theta)));
|
||||
}
|
||||
var xSize = Math.sqrt(((x1 - x2) ** 2 + (y1 - y2) ** 2));
|
||||
var tStart = Math.PI / 2;
|
||||
var tEnd = (3 * Math.PI / 2) + (2 * Math.PI * numLoops);
|
||||
var xEnd = a * tEnd - b * Math.sin(tEnd);
|
||||
var yEnd = a + b;
|
||||
var xFactor = xSize / xEnd;
|
||||
var yFactor = perpSize / yEnd;
|
||||
var xShift = x1 - a * (Math.PI / 2) + b * Math.sin(Math.PI / 2);
|
||||
var yShift = y1 - a + b * Math.cos(Math.PI / 2);
|
||||
for (p = tStart; p <= tEnd; p += tStep)
|
||||
{
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(xShift + xFactor * (a * p - b * Math.sin(p)), yShift + yFactor * (a - b * Math.cos(p)));
|
||||
ctx.lineTo(xShift + xFactor * (a * (p + tStep) - b * Math.sin(p + tStep)), yShift + yFactor * (a - b * Math.cos(p + tStep)));
|
||||
ctx.stroke();
|
||||
}
|
||||
if (Math.sign(theta) == 1)
|
||||
{
|
||||
console.log("sign = 1");
|
||||
ctx.rotate(-Math.atan((y2 - y1) / (x2 - x1)) * (Math.sign(theta)));
|
||||
} else
|
||||
{
|
||||
console.log("sign = -1");
|
||||
ctx.rotate(-Math.PI + Math.atan((y2 - y1) / (x2 - x1)) * (Math.sign(theta)));
|
||||
}
|
||||
ctx.translate(0, -yPos);
|
||||
}
|
||||
|
||||
|
||||
window.addEventListener('resize', function(event) {
|
||||
c.width = window.innerWidth;
|
||||
c.height = window.innerHeight;
|
||||
ctx.translate(c.width / 2, c.height / 2);
|
||||
ctx.scale(1, -1);
|
||||
}, true);
|
||||
|
||||
Update();
|
||||
|
||||
</script>
|
||||
</body>
|
||||
<p xmlns:cc="http://creativecommons.org/ns#" style="font-size: 1vw; bottom: 0px; position: absolute;">
|
||||
This work is licensed under
|
||||
<a href="http://creativecommons.org/licenses/by-nc-nd/4.0/?ref=chooser-v1" target="_blank" rel="license noopener noreferrer" style="display:inline-block;">CC BY-NC-ND 4.0<img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/nc.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/nd.svg?ref=chooser-v1"></a></p>
|
||||
</html>
|
||||
Reference in New Issue
Block a user