모에니/모애니 다운로드

수정: 이하 내용 다 갖다버리시고 모에니에서 영상 다 받으면 개발자 도구 콘솔에 이것만 붙여넣으시면 됩니다.

function downloadBlob(blob, name) {
  const link = document.createElement("a")
  link.href = blob
  link.download = name
  document.body.appendChild(link)
  link.dispatchEvent(new MouseEvent('click', { bubbles: true, cancelable: true, view: window }))
  document.body.removeChild(link)
}

this.client.torrents[0].files[0].MoeVideoBlob((p, q) => downloadBlob(q, this.client.torrents[0].files[0].path))

플레이어에 우클릭을 해도, 네트워크 흐름을 살펴봐도, 캐시를 살펴봐도 이상한 파일 뭉치만 있습니다. 하나 잡아다 까 봐도 제대로 된 내용물은 보이지 않습니다.

준비물: Webtorrent 클라이언트, 크롬 등의 (개발자 도구가 제대로 된) 브라우저

원하는 애니 페이지에 들어가서, 화를 선택하기 전에 개발자 도구로 들어갑니다.
Sources 탭에서 player.moeni.org 호스트의 lib.php 어쩌고 파일을 열고, Prettyprint 처리합니다.
ctrl-F를 이용해서 class Torrent를 찾고, 멤버함수 get downloaded()의 마지막 return downloaded에 왼쪽의 줄 번호를 눌러 브레이크포인트를 걸어 줍니다.
이제 화를 선택합니다.
그대로 Paused on debugger가 뜨면, Console 탭으로 전환하여, 다음을 붙여넣습니다.

String.fromCharCode.apply(null, this.client.peerIdBuffer)

이상한 20자리 문자열이 튀어나올 텐데, 이것이 Peer ID입니다. 따옴표 빼고 적당히 옮겨 둡시다.

this.magnetURI

이것은 WebTorrent의 Magnet URL입니다. 역시 따옴표 빼고 적당히 옮겨 둡시다.

이제 WebTorrent 클라이언트를 수정해서 Peer ID를 적용해야 합니다.

일단 클라이언트를 켜 주고, ctrl-shift-P를 눌러 webtorrent.js에 개발자 도구를 띄워 줍니다. (개발자 도구에 기본적으로 열려 있는 파일입니다)

// Line 54의
const PEER_ID = Buffer.from(VERSION_PREFIX + crypto.randomBytes(9).toString('base64'))

// 를 아래처럼 바꾸어 준다: 

const PEER_ID = Buffer.from('아까 복사해 두었던 Peer ID')
// const PEER_ID = Buffer.from('-WW0105-+N3Q18UAoMRp') 같이 되어야 한다. (이 줄은 필요 없습니다)

Peer ID 수정이 완료되었습니다. 앞에서 옮겨 둔 Magnet URL을 붙여넣기해 영상을 받으면 됩니다.

Re: 제로부터 시작하는 2차원 새총역학

속도 Domain
힘 Domain

투사체 질량  m
항력  F=-C_d v=-C_d \sqrt{\dot{x}+\dot{y} }
초기속도  v=v_0, θ=θ_0

m \ddot{x}+C_d \dot{x} =0
m \ddot{y}+C_d \dot{y} =-mg

m \ddot{x}+C_d \dot{x} =0

특성방정식 m \lambda ^2+C_d \lambda =0
\lambda =0, -C_d/m

x(t)=c_1 e^0+c_2 e^{- \frac{C_d}{m} t}=c_1+c_2 e^{- \frac{C_d}{m} t}

초기조건
x'(t)=c_2 {- \frac{C_d}{m}} e^{-\frac{C_d}{m} t}
x'(0)=v_0  cos⁡(θ_0), x_0=0

c_2=- \frac{m}{C_d}  v_0  \cos⁡{θ_0}, c_1=\frac{m}{C_d}  v_0  \cos⁡{θ_0} x(t)=\frac{m}{C_d}  v_0  \cos⁡{θ_0 } - \frac{m}{C_d}  v_0  \cos⁡{θ_0 } \cdot e^{- \frac{C_d}{m} t} my C_d \ddot{y}=-mg=r(t)

r(t)=0으로 놓고 제차 상미방으로 풀이

특성방정식 m \lambda^2+C_d \lambda=0

\lambda=0, -\frac{C_d}{m} y_h (t)=c_1 e^0+c_2 e^{-\frac{C_d}{m} t}=c_1+c_2 e^(-\frac{C_d}{m} t) y_h (t)=\frac{m}{C_d}  v_0  \sin{θ_0}-(\frac{m}{C_d}  v_0  \sin⁡{θ_0}+(m^2 g)/C_d ) \cdot e^{-\frac{C_d}{m} t}

r(t)=-mg=k꼴이므로 y_p (t)=A로 놓으면 답이 안 나옴
y_p (t)=Ax+B라고 하자

C_d \cdot (A)=-mg, B=\frac{m^2 g}{{C_d}^2}

y_h (t)=\frac{m}{C_d}  v_0  \sin⁡{θ_0}- (\frac{m}{C_d}  v_0  \sin⁡{θ_0}+\frac{m^2 g}{C_d} ) \cdot e^{-\frac{C_d}{m} t}
y_p (t)=-\frac{mg}{C_d}  t+\frac{m^2 g}{{C_d}^2}

y(t)=\frac{m}{C_d}  v_0  \sin⁡(θ_0)-(\frac{m}{C_d}  v_0  \sin(θ_0)+(m^2 g)/C_d ) \cdot e^{-\frac{C_d}{m} t} -\frac{mg}{C_d}  t+\frac{m^2 g}{{C_d}^2}
import math
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import (MultipleLocator, AutoMinorLocator)

v0 = 100.0          # m/s
#a0                 # rad
m = 1.0             # kg
#Cd                 # kg/s
g = 9.8             # m/s^2

cond = [(1/3 * math.pi, 0.1), (1/4 * math.pi, 0.1), (1/6 * math.pi, 0.1)]   # (a0, Cd)

dt = 0.001          # s

def doit(a0, Cd):
    t = [0.0]
    x = [0.0]
    y = [0.0]

    while y[-1] >= 0.0:
        t.append(t[-1] + dt)
        ex = math.exp(-Cd / m * t[-1])
        x.append(
            m / Cd * v0 * math.cos(a0)
            - m / Cd * v0 * math.cos(a0) * ex
        )
        y.append(
            m / Cd * v0 * math.sin(a0)
                 - (m / Cd * v0 * math.sin(a0) + m**2 * g / Cd**2) * ex
                 - m * g / Cd * t[-1]
                 + m**2 * g / Cd**2
                 )
    return (x, y)

leg = []

fig, ax = plt.subplots()

for a0, Cd in cond:
    (x, y) = doit(a0, Cd)
    ax.plot(x, y)
    leg.append(f"v(0) = {v0:.1f} [m/s], θ(0) = {a0/math.pi*180.0:.1f} [deg], Cd = {Cd:.1e} [kg/s], m = {m:.2e} [kg]")

plt.xlim(0.0, v0**2 / g)
plt.ylim(0.0, v0**2 / g / 2)
plt.xlabel("x [m]")
plt.ylabel("y [m]")
plt.gca().set_aspect('equal', 'box')
plt.legend(leg, fontsize="x-small")
ax.xaxis.set_major_locator(MultipleLocator(100))
ax.xaxis.set_major_formatter('{x:.0f}')
ax.xaxis.set_minor_locator(MultipleLocator(10))
ax.yaxis.set_major_locator(MultipleLocator(100))
ax.yaxis.set_major_formatter('{x:.0f}')
ax.yaxis.set_minor_locator(MultipleLocator(10))
plt.savefig('posplot.svg', transparent=True)
import math
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import (MultipleLocator, AutoMinorLocator)

v0 = 100.0          # m/s
a0 = 5/12 * math.pi  # rad
m = 0.15             # kg
Cd = 0.1            # kg/s
g = 9.8             # m/s^2

dt = 0.001          # s

def doit(a0, Cd):
    t = [0.0]
    vx = [0.0]
    vy = [0.0]
    y = 0.0

    while y >= 0.0:
        t.append(t[-1] + dt)
        vx.append(
            v0 * math.cos(a0) * math.exp(-Cd / m * t[-1])
        )
        vy.append(abs(
                 (v0 * math.sin(a0) + m * g / Cd) * math.exp(-Cd / m * t[-1])
                 - m * g / Cd
                 ))
        y = m / Cd * v0 * math.sin(a0) \
                 - (m / Cd * v0 * math.sin(a0) + m**2 * g / Cd**2) * math.exp(-Cd / m * t[-1]) \
                 - m * g / Cd * t[-1] \
                 + m**2 * g / Cd**2
    return (t, vx, vy)

leg = []

fig, ax = plt.subplots()

(t, vx, vy) = doit(a0, Cd)
ax.plot(t, vx)
ax.plot(t, vy)
vt = []
for va, vb in zip(vx, vy):
    vt.append(math.sqrt(va ** 2 + vb ** 2))
ax.plot(t, vt)
leg.append(f"vx, v(0) = {v0:.1f} [m/s], θ(0) = {a0/math.pi*180.0:.1f} [deg], Cd = {Cd:.1e} [kg/s], m = {m:.2e} [kg]")
leg.append(f"vy, v(0) = {v0:.1f} [m/s], θ(0) = {a0/math.pi*180.0:.1f} [deg], Cd = {Cd:.1e} [kg/s], m = {m:.2e} [kg]")
leg.append(f"v, v(0) = {v0:.1f} [m/s], θ(0) = {a0/math.pi*180.0:.1f} [deg], Cd = {Cd:.1e} [kg/s], m = {m:.2e} [kg]")

plt.xlim(0.0, t[-1])
plt.ylim(0.0, v0)
plt.xlabel("t [s]")
plt.ylabel("v [m/s]")
#plt.gca().set_aspect('equal', 'box')
plt.legend(leg, fontsize="x-small")
ax.xaxis.set_major_locator(MultipleLocator(1))
ax.xaxis.set_major_formatter('{x:.0f}')
ax.xaxis.set_minor_locator(MultipleLocator(0.1))
ax.yaxis.set_major_locator(MultipleLocator(10))
ax.yaxis.set_major_formatter('{x:.0f}')
ax.yaxis.set_minor_locator(MultipleLocator(1))
plt.savefig('velplot2.svg', transparent=True)