2018년 9월 27일 목요일

git

파일 관리 차원에서 알아야 할 개념

Tracked / Untracked  ( Tracked : git 이 추적하며 버전관리를 하고 있는것 )
Stage / Unstage  ( Stage : Commit 직전 머무르는 영역 )
Working directory / Stage(Index) / HEAD
( HEAD : Stage에 머무르던 파일들이 Commit 명령으로 local에 최종 기록)
——————————————————————————————-

폴더가 있다.  Working directory 이다. 아무것도 없다.

m0.txt,  m1.txt,  m2.txt  파일 세개를 만들었다. 이 파일들은
Untracked & Unstage 상태이다.

세 파일들을 add 시켰다.  세 파일들은 
Tracked &  Stage 상태이다.

세 파일들을 commit 시켰다. 세 파일들은
Tracked &  HEAD 상태이다. 

m0.txt 의 내용이 없었는데 “000″을 기입하고 저장했다. 이 파일은
Tracked &  Unstage 상태이다.

m0.txt 파일을 add 시켰다.  이 파일은
Tracked &  Stage 상태이다.

m0.txt 파일을 commit 시켰다.  이 파일은 
Tracked &  Head 상태이다. 
——————————————————————————————-

clone

git clone 저장소주소( git clone https://github.com/***.git )

status

git status (작업 경로 내의 파일 상태를 보여준다.)

add

git add 파일명.확장자 ( git add rm1.txt )
반대로 Unstage 하려면
git reset HEAD 파일명.확장자 (  git reset HEAD rm0.txt )

revert 

내용 변경을 취소하고 최신 커밋 버전으로 돌아가고 싶을 때
git checkout – 파일명.확장자 ( git checkout – rm0.txt )

remove

git rm 파일명.확장자
하게 되면 파일이 지워지고 tracked 상태고 해제되고 Stage 상태가 된다.
이를 취소하기 위해서는 
git reset HEAD 파일명.확장자 사용해 Unstatge 상태로 만들고
git checkout – 파일명.확장자 로 revert 해준다
삭제는 하나 파일을 local에 남겨두고 싶을때
git rm –cached 파일명.확장자
여러 개의 파일이나 디렉토리를 한꺼번에 삭제 
git rm log/\*.log ( log 폴더 안의 *.log 파일 모두 삭제)
git rm \*~  ( ~로 끝나는 것 모두 삭제)

commit

git commit -m “커밋 시 남길 로그 내용” 
git commit -m “커밋 시 남길 로그 내용” -a
-a 는 tracked 상태인 파일들을 자동으로 stage에 넘기고 커밋.

push

 git push origin master

remote

git remote -v( 리모트 저장소 확인 )
git remote add 단축이름 url ( 리모트 저장소 추가 )
git fetch 단축이름

기타

git mv 파일명 파일명 ( 이름변경 )
git remote -v( 리모트 저장소 확인 )
git remote add 단축이름 url ( 리모트 저장소 추가 )

















라디안(Radian)

이 포스트를 쓰는 이유는
라디안 이라는 3.14…(ㅠ) 이라는 값을
진심으로 각도로 인식 할 수 있는
수학적 사고를 해보자는 취지이다.

라디안은 각도를  몇˚ 가 아닌 
실수로 표현하기 위해 고안된 단위 이다. 
어렵지 않다
즉 180˚  를 3.14……. 로 표현 하겠다는 것 뿐이다.
그리고 3.14… 의 소수점이 끝이 없기에 ㅠ 로 대체 하겠다는 것이다.
image
라디안의 정의
반지름과 호의 길이가 같을 때의 각도를 실수 1로 나타낸 것

여기까지는 그런가 보다 할 수 있다.
그런데 여기서 ㅠ(파이) 라는 라디안 값을 설명 해보라 한다면?
그냥 3.14… 인가? 어디에 써먹는 것인가?

ㅠ(파이) 란 원주율이다
바로 원의 지름에 대한 비율이다.
원의 지름이 몇 이든 ㅠ를 곱해주면 원의 둘레가 나온다는 것이다.
즉 원의 지름이 1일때 원의 둘레는 3.14… 이라는 것이다.
우리가 흔히 알고 있는 원의 둘레를 구하는 공식
2ㅠr 은  2r(지름) * ㅠ(3.14)에서 온 것이다.


여기서 체크해야 할 점은
라디안(호도법)의 출반점은 반지름 이고
원주율  ㅠ(파이)의 출발점은 지름 이라는 것이다.


이번엔  2ㅠr 에서 반지름을 지름으로 만드는 대신 반지름을 유지하고
ㅠ를 두배 시켜 보겠다
반지름 곱하기 2ㅠ(3.14… * 2) 가 원의 둘레가 된다.
다시 말해 반지름 곱하기 6.28… 가 원의 둘레가 된다. 

이같은 결과는 라디안 이라는 개념 없이 그저  2ㅠr 이라는 공식과
ㅠ는 3.14… 라는 것에서 착안한 것이다.

그렇다면 이제 라디안 개념을 끌어와 보겠다.
반지름 곱하기 6.28… 가 원의 둘레 라면
1라디안 곱하기 6.28… 은 어떻게 될까?
결과를 말하자면 1라디안 곱하기 6.28… 은 각도로 따지면 360˚ 가 된다.

1라디안에 대응하는 호의 길이는 반지름 이다
3*라디안 일때의 호의 길이는 3*반지름 이다
라디안 곱하기 6.28… 가 나타내는 각도가 그려내는
원호의 길이가 반지름 곱하기 6.28…  의 길이와 같은 것이다.

이것이 라디안을 이해하는 키가 된다.
원의 반지름의 길이가 1인 경우 
원주 자체가 그냥 라디안 수치인 것이다.
참고로 3.14.. 라는 값은 원주율이지만
180도 만큼 돌아간 경우의 원호의 길이 즉 원주의 반에 해당하는
길이이다.
따라서 호도법 라디안이라는 수치는 원주(둘레)를 그려내는
각도라고 생각하면 되는 것이다.

Vector 활용

Normalize ( 정규화? 규격화? )

 (1, 2, 3) 이라는 3차원 백터를 노말라이즈 하는 과정
 1. 백터의 힘을 구한다
  vectorForce = sqrt(1*1 + 2*2 + 3*3)
  vectorForce = 3.74…. 정도가 나온다. 이것이 백터가 가진 힘(길이)!
 2. 이제 이 힘으로 각 원소를 나누어준다
  x = 1 / vectorForce
  y = 2 / vectorForce 
  z = 3 / vectorForce 
해서 나오는 (x, y, z) 가 노말라이즈 된 백터이다
(0.267, 0.534, 0.801) 라는 백터가 나온다
이 백터의 힘을 구해본다면 그 힘(길이)이 1이 나올 것
방향은 유지하고 힘(길이)을 1로 맞추는 과정이 Normalize

Dot Product ( 내적 )

두 백터를 가지고 계산하여 나오는 실수 값
내적의 활용도는 무궁무진, 그 이유는?!

1. 내적의 계산 방법
v1 = (a, b, c)
v2 = (x, y, z)
내적의 표기는 ->  v1 · v2 ( 가운데 점이다. 그래서 dot product )
계산법 (  각 원소를 같은 위치의 원소들과 곱하고 그것들을 모두 더한다 )
 1) v1 · v2 = a*x + b*y + c*z
 2) v1 · v2 = v1Force *  v2Force * cos(theta) 
2) 번 식이 상당히 중요함. 왜냐하면  cos 과 theta 개념이 탑재 되어 있기 때문
위 식에 나온  theta 는 v1 과 v2 의 사이각을 의미한다.
그렇다 그 사이각의 변화에 따라 내적값이 변경 된다.
아 내적은 두 백터의 관계가 수치로 표현 되는 것이구나!!
그렇다면 이 관계? 로 부터 어떤 수치가 나오는걸까?
이를 알아보기 위해 우선 2번 식을 간소화 해보자
위에서 언급한 Normalize 를 이용하면 v1Force 와 v2Force 를
1로 만들 수 있다는 것에 착안한다.
v1 과 v2 의 내적을 구하기 전에 각각을 normalize 하고 2번 식을 구성해보자
그러면  v1 · v2 = 1 *  1 * cos(theta) 이런 식으로 나오게 되고
결국은  v1 · v2 = cos(theta) 이렇게 되는것이다.
실제로 내적은 대부분 노말라이즈된 백터를 가지고 수행하는 것이 원칙이다.
결국 내적의 값은 코사인 함수에 그 사이각을 라디안 으로 대입하면 나오는
값이다. 

이제 코사인 곡선을 그려보자




image

이 그래프를 잘 보면
cos() 의 괄호 안에 들어가는 라디안으로 표기 각도값에 따라
cos()  의 값이 1 과 -1 사이를 오르락 내리락 한다.

그렇다 내적은 -1 과 1 사이 값을 가진다.
사이각이 0, 즉 같은 방향의 백터들은 내적값이 1이고
사이각이 180도, 즉 반대 방향인 백터들의 내적은 -1
사이각이 직각을 이루는 경우는 0 이다.

내적 값은 알았고 반대로 theta 값 즉 두 백터의 사이각을 구하려면
어떻게 해야 할까
v1 · v2 = cos(theta) 을 바탕으로 양변에 acos를 곱해준다
acos( v1 · v2 ) = theta 가 된다

참고로 각도와 라디안 변화식은

180 가  π  라는 것을 기억한다면
1° = π / 180°
180° ->    180°  x  (π / 180) ->  π
0.5 rad -> 0.5 x (180 / π) -> 90 / π

Cross Product ( 외적 )

외적의 경우 계산후 실수값이 아닌 
두 백터에 모두 수직인 백터가 나온다 

1. 외적의 계산 방법
v1 = (a, b, c)
v2 = (x, y, z)
외적의 표기는 ->  v1 x v2 ( 가운데 x이다. 그래서 cross product )


활용법

1. 점과 직선의 최단거리








































2.점과 선분의 최단거리








































3.