그림처럼 경첩으로 연결된 동일한 두 막대가 있다. 왼쪽 막대는 바닥 경첩에, 오른쪽 막대는 질량 $M$인 물체에 경첩으로 연결되어 있다. 두 막대의 중간 연결 부위가 바닥에 닿는 속도는 $\sqrt{gL}$의 몇 배인가? 마찰은 없다.

1. $\sqrt{\frac{3\sqrt{2}}{2}}$

2. $\sqrt{\frac{3\sqrt{2}}{2}}$ 보다 크다.

3. $\sqrt{\frac{3\sqrt{2}}{2}}$ 보다 작다.

 

더보기

중간 부분이 바닥에 닿는 순간 $M$은 정지하고, 두 막대는 같은 각속도를 가진다. 왼쪽 막대는 시계방향, 오른쪽 막대는 순간적으로 $M$을 기준으로 같은 각속도를 회전한다(순간 회전축). 역학적 에너지 보존을 적용하면,

$$ 2\times mg\frac{L}{2} \sin(45^\circ) = \frac{1}{2} I \omega^2 \times 2 \quad \rightarrow ~~\therefore \omega=\sqrt{\frac{3\sqrt{2}g}{2L}}$$

$$\therefore ~v=\sqrt{\frac{3\sqrt{2}gL}{2}}$$

 
728x90
Posted by helloktk
,

그림처럼 위아래로 놓인 두 개의 물그릇이 펌프로 연결하였다. 펌프는 물을 일정한 비율로 위로 올리거나 밑으로 내릴 수 있다. 아래에 있는 물이 위로 올라가는 동안 저울의 눈금은? 단, 펌프의 작동이 멈추었을 때 저울의 눈금(무게)은 10 kg를 나타낸다. 

  1. 10 kg
  2. 10 kg 보다 작다
  3. 10 kg 보다 크다.

반대로 위에 있는 물이 아래로 내려오는 동안 저울의 눈금은?

 

더보기

물이 이동하면 질량중심이 변한다. 질량중심이 가속을 하고 있으면 힘의 필요한데 이 힘이 저울의 눈금에 영향을 준다. 물이 위로 올라가는 경우를 보자. 계 전체 질량을 $M=W/g$, 단위 시간당 물의 이동량을 $k~[\text{kg/s}]$, 물그릇의 단면적을 $A$, 높이차를 $H$라 하면, $dt$초 동안에 물의 이동 질량은 $dm = kdt$이므로 질량중심의 변화는 ($y_1$=위쪽 수면 높이, $y_2$=아래쪽 수면 높이)

$$ dy_{cm} = \frac{ dm y_1 + (-dm) y_2}{M} =\frac{dm( y_1 - y_2)}{M} \quad \rightarrow ~~v_{cm} = \frac{k}{M} ( y_1 - y_2)$$ 

위쪽 그릇의 수면 높이 변화율은 (질량=밀도*밑면적*높이)

$$\frac{dy_1}{dt} = + \frac{k}{\rho A}$$

아래쪽 수면 높이 변화율은  

$$\frac{dy_2}{dt} = - \frac{k}{\rho A}$$

따라서 질량중심 가속도는 

$$ a_{cm} = \frac{k}{M} ( \dot{y}_1 -\dot{y}_2) = \frac{k^2}{\rho AM}$$

계 전체의 외력은 중력과 저울이 작용하는 수직항력이므로

$$M a_{cm } = \sum F_y = -  W +N  \quad ~~\therefore N = W + \frac{k^2}{\rho A}$$

임을 알 수 있다.  물이 내려가는 경우는 질량중심이 아래로 가속한다.

 
 
 
 
 
728x90

'Physics > 유체역학' 카테고리의 다른 글

장력의 변화는?  (2) 2022.03.21
수면의 기울기는  (0) 2022.02.21
어느 물탱크가 더 빨리 비워질까?  (0) 2022.02.14
배수 파이프에서 물의 속력은?  (0) 2022.02.14
얼마나 일을 해야 하는가?  (0) 2022.02.11
Posted by helloktk
,

흐르는 물의 속력이 $v$인 폭 $L$인 강이 있다. 같은 속력 $v$로 움직일 수 있는 배를 이용해서 강을 건너려고 한다. 배가 움직이는 동안 배의 방향이 항상 출발 지점의 정확히 맞은 편($\bf B$)을 향하도록 만든다. 배가 실제로 도착한 지점은?

1. A

2. B

3. C

4. 정보부족

 

더보기

B지점에서 잰 배까지의 거리를 $r$ 수평과 이루는 각을 $\theta$라 하자. B지점에서 보았을 때 배가 실제로 움직이는 속도는 흐르는 물의 속도는 더한 속도로 움직이므로,

$$ \frac{dr}{dt} = - v_{boat} + v_{river}\cos\theta = -v(1 - \cos \theta). \quad ~~( r(0)=L)$$

그리고 각속도는 맞은편에 접근할 수록 각이 줄어들므로,

$$ \frac{d\theta}{dt} = -\frac{v_{river}\sin \theta}{r}=-\frac{v\sin \theta}{r},\quad ~~(\theta: \frac{\pi}{2}\rightarrow 0)$$

두 식에서

$$ \frac{dr}{d\theta} = r \frac{1-\cos\theta}{\sin \theta}$$

이므로 적분하면 $(r(t=0) = L, ~\theta(t=0)=\pi/2)$,

$$ r = \frac{L}{2}\sec^2(\theta/2)$$

이 곡선은 B를 초점으로 하고 B에서 오른쪽으로 $L$ 떨어진 AB에 평행인 직선을 준선으로 하는 포물선임을 쉽게 알 수 있다.

 
728x90
Posted by helloktk
,

Apparent depth

Physics/광학 2022. 2. 18. 22:00

깊이가 $h$인 수영장 바닥에 있는 물체를 물 밖에서 바라볼 때 얼마의 깊이에 있는 것으로 보일까? 단, 바라보는 각도는 수직에 대해서 $\theta$이고, 물의 굴절률은 $n$이다. 참고: 그림은 물체의 위가 겉보기 위치인 것처럼 그려졌으나 항상 그런 것은 아니다.

1. $\frac{h}{n} \Big(  \frac{\cos^2 \theta}{1-{\sin^2 \theta}/{n^2} } \Big)^{3/2}$ 

2. $\frac{h}{n}$

3. $\frac{h\cos\theta}{n}$

 

더보기

 

눈은 작지만 유한한 크기를 가지고 있으므로 물체의 한 점에서는 나오는 여러 광선을 받아들인다. 눈에 들어오는 광선들의 연장선이 만나는 지점에 물체의 겉보기 위치가 된다. 그리고 같이 광선 1과 2의 경로를 분석해보자. 눈이 작으므로 두 광선은 매우 가까이 있다( $\delta\ll 1$: 그림은 과장되게 그려진 것이다). 광선 1에 Snell의 법칙을 적용하면

$$ n \sin\theta_i = \sin \theta_r$$

이다. 이보다 조금 다른 각도 $(\theta_r + d\theta_r)$ 로 들어오는 광선 2에 대해서도 Snell의 법칙을 적용한 후 $((n \sin (\theta_i + d\theta_i)  = \sin(\theta_r +d\theta_r) )$ 광선 1과의 차이를 구하면

$$ n \cos\theta_i d\theta_i  =\cos \theta_r d \theta_r  \quad \rightarrow \quad \frac{d\theta_i}{d\theta_r} = \frac{\cos\theta_r}{n\cos \theta_i}$$

그림에서 광선 1의 실제 경로에 대해서 물체의 수평 거리$(x)$와 깊이$(y)$의 관계는  $x=y\tan \theta_i$, 광선 2에 대해서는 $x+\delta = y \tan(\theta_i + d\theta_i)$이므로 둘의 차이를 계산하면

$$ \delta = y \sec^2 \theta_i d \theta_i$$

마찬가지로 광선1 과 2의 겉보기 경로에 대해 겉보기 수평 거리$(x_a)$와 깊이$(y_a)$의 관계를 정리하면

$$\delta = y_a \sec^2\theta_r d \theta_r$$

이므로

$$ \frac{d\theta_i}{d\theta_r} = \frac{y_a \cos^2 \theta_i}{y \cos^2 \theta_r}$$

두 결과를 종합하면

$$ y_a = \frac{y}{n} \left( \frac{\cos \theta_r}{\cos \theta_i}\right)^3 = \frac{y}{n}\left( \frac{\cos^2 \theta_r}{1 - {\sin^2 \theta_r}/{n^2}}\right)^{3/2}$$

728x90
Posted by helloktk
,

평면을 한 점 $(x, y)$이 원점을 축으로 하는 회전에 의해서 $(x', y')$ 위치로 옮겼다면 두 점 사이의 관계는 

$$ \begin{pmatrix} x' \\ y'\end{pmatrix} = \begin{pmatrix} \cos \theta & \sin \theta \\ -\sin \theta & \cos \theta\end{pmatrix}\begin{pmatrix} x\\ y\end{pmatrix} = \mathbf{R}_\theta \begin{pmatrix} x\\ y\end{pmatrix}$$

로 표현된다. 여기서 $\theta$는 시계방향으로 회전한 각이다. 이 회전 변환은 3번의 shear 변환의 곱으로 다음처럼 쓸 수 있다.

$$ \mathbf{R}_\theta = \mathbf{S}_x. \mathbf{S}_y . \mathbf{S}_x$$

$$ \mathbf{S}_x =\begin{pmatrix} 1 & \tan (\theta/2) \\0 &1\end{pmatrix}, ~~\mathbf{S}_y =\begin{pmatrix}1 & 0 \\ -\sin \theta & 1\end{pmatrix}$$

 

이제 Fourier변환과 shear 변환 사이의 관계를 알아보자. 일반적인 2차원 Fourier 변환은

\begin{gather} F(u, v)  =\iint   f(x, y) e^{-2\pi i (ux + vy)}dxdy={\cal F}[ f(x, y)] \\= {\cal F_x}\left[{\cal F_y} [f(x, y)]\right]={\cal F_y}\left[  {\cal  F_x}  [f(x, y)]\right] = F_1 (u) F_2 (v)\end{gather}

여기서 $\cal F_{x}, F_y$는 각각 $x$, $y$-방향 Fourier 변환이고 순서에 상관이 없다.

 

이제 $f(x, y)$에 $x$-방향으로 $a$ 만큼 shear 변환을 한 결과가 $g(x, y)$일 때,

$$ g(x, y) = f(x + ay, y)$$

로 쓸 수 있고, 여기에 $x$ 방향으로 Fourier 변환을 하면

$$ G_1(u, y) = {\cal F_x}[g(x, y)]= {\cal F_x}[f(x+ay, y)] = F_1(u, y) e^{-2\pi i ua y} =e^{-2\pi i  ua y}  {\cal F_x}[ f(x, y)]$$ 

임을 알 수 있다. 즉, shear 변환된 함수의 Fourier 변환은 원함수의 Fourier변환에 shear 파라미터에 의존하는 위상 요소 $e^{-2\pi i  ua y}$만 곱해주면 쉽게 구할 수 있음을 알 수 있다. 또한 shear 변환에 의해서 스펙트럼이 위상만 변화고 크기에는 변화가 생기지 않음도 알 수 있다.

참고: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.190.4473&rep=rep1&type=pdf

 

아래의 코드는 이미지의 중앙을 기준으로 회전을 한 경우를 보여준다: $\theta = 60^\circ$. 중간 단계에서 artifact를 없애기 위해 원본 이미지의 가장자리를 $0$으로 채워 두 배 크기로 만든 후 수행한다. 임의의 지점에 대한 회전도 shear 변환 코드를 조금 손보면 쉽게 구현할 수 있다.

중간단계: 

$x$ 방향 shear 변환 결과
추가적인 $y$ 방향 shear 변환 결과

int fft1d(int dir, int nn, double x[], double y[]); /* https://kipl.tistory.com/22 */
#define HORIZONTAL 0
#define VERTICAL   1
/* perform shear transform along "axis" direction; */
void shearImage(int axis, double shear,
                int width, int height, double *input, double *output) 
{
    int size, halfsz, othersize, halfothersz;
    double TWOPI = 8.0 * atan(1.);
    /* size is the size of the image in the direction of the axis of shear. 
    ** othersize the size of the image in the orthogonal direction 
    */
    if (axis == HORIZONTAL) {
        halfsz = (size = width) >> 1;
        halfothersz = (othersize = height) >> 1;
    }
    else {
        halfsz = (size = height) >> 1;
        halfothersz = (othersize = width) >> 1;
    }

    std::vector<double> re_sig(size, 0);
    std::vector<double> im_sig(size, 0);
    for (int i = 0; i < othersize; i++){
        if (axis == HORIZONTAL)
            memcpy(&re_sig[0],  &input[i * size], size * sizeof(double));
        else
            for (int j = 0; j < size; j++) re_sig[j] = output[j * othersize + i];

        std::fill(im_sig.begin(), im_sig.end(), 0);  // im: padding 0;
        fft1d(1, size, &re_sig[0], &im_sig[0]);
        double shift = - (i - halfothersz - .5) * shear  * TWOPI;
        // No need to touch j = 0;
        for (int j = 1; j < halfsz; j++) {
            double cc = cos(j * shift / size);
            double ss = sin(j * shift / size);
            double reval = re_sig[j];
            double imval = im_sig[j];
            re_sig[j] = cc * reval - ss * imval;
            im_sig[j] = ss * reval + cc * imval;
            re_sig[size - j] =  re_sig[j];
            im_sig[size - j] = -im_sig[j];
        }
        re_sig[halfsz] = cos(shift/2) * re_sig[halfsz] - sin(shift/2) * im_sig[halfsz];
        im_sig[halfsz] = 0.;

        fft1d(-1, size, &re_sig[0], &im_sig[0]);
        if (axis == HORIZONTAL)
            memcpy(&output[i * size], &re_sig[0], size * sizeof(double));
        else
            for (int j = 0; j < size; j++) output[j * othersize + i] = re_sig[j];
    }
};
 
728x90

'Image Recognition > Fundamental' 카테고리의 다른 글

Harris Corner Detector  (0) 2022.04.07
Valley emphasis Otsu threshold  (0) 2022.02.23
FFT를 이용한 영상의 미분  (0) 2022.02.12
SVD Fitting  (0) 2022.02.07
Color Histogram Equalization  (4) 2022.02.07
Posted by helloktk
,