구글링하면 누구나 해결방법을 아래와 같이 볼 수 있는데..

 

android:elevation -> 0dp

하지만, 가끔 이게 동작되지 않을 때가 있는데 그럴 경우엔

app:elevation -> 0dp 

로 해주면 작동이 잘 되는것을 확인할 수 있다. 

 

 

 

'# 기타 공부한 것들 > Android' 카테고리의 다른 글

Volley 사용하기(GET, POST)  (0) 2018.08.06
Nevigation View 만들기  (0) 2018.07.26
Fragment(프래그먼트) 만들기  (0) 2018.07.15
(MAC) Android Studio 단축키  (0) 2018.07.01
Android Project Review with BP(2)  (0) 2018.06.18

요즘 앱을 사용하시면 거의 모든 것들에서 프래그먼트를 상뇽하고 있다는 것을 쉽게 알 수 있습니다.

그만큼 효율적이고, 잘만 만든다면 코드도 간략해 질 수 있습니다.

 

프래그먼트를 만들려면 2가지 준비물만 만드실 수 있으시면 됩니다.

1. Java Class

2. layout XML

2가지를 만들수만 있다면, 몇 가지 코드만 작성하면 프래그먼트를 만들 수 있는데요.

---------------------------------------------------------------------------------------------------------------------------

Fragment 만들기

1. Java Class파일에 Fragment를 extends하기. 

2. Activity에서도 onCreate가 있듯이, 프래그먼트도 그와 같은 역할을 하는 메소드가 있습니다.

사진과 같이 onCreateView라는 메소드입니다. 

이제 이 안에서 return 부분을 지워주시고, 밑의 두  사진과 같이 입력해주시면 됩니다.

 

* R.layout.fragment_exam은 여러분이 만든 layout파일입니다. container은 메소드에 있는 ViewGroup parameter을 그대로 써주시면 됩니다.

* attachToRoot는 activity화면에 프래그먼트를 바로 붙여줄 것인지, 호출 시에 붙여줄 것인지를 정하는 파라미터입니다. false해주시면 됩니다.

 

3. 위에서 사용햇듯이, layout파일은 여러분이 만든걸로 ^^

자, 그럼 이제 프래그먼트를 액티비티에 올릴 준비가 되었습니다.

mainActivity로 가볼까요?

이 mainActivity에는 container라는 id를 가진 FrameLayout이 있다고 가정하겠습니다. 

프래그먼트를 붙일려면 단 한줄의 코드만 작성해 주시면 됩니다.

프래그먼트는 기본적으로 액티비티와는 조금 다른 구조를 가지게 됩니다.

 Transaction을 통해 시작을 시켜야만 하는데요. 이 모든것이 한줄에 다 들어갈 수 있습니다. 

 

* R.id.container은 위에서 가정한 FrameLayout입니다. 

* fragmentExam은 Fragment를 상속받은 Java Class입니다. 

* commit() 또한, 빼먹지 말아야 합니다.

 

onCreate에 작성하시고 실행시키면 여러분이 만든 프래그먼트가 activity에 올려져 있을겁니다.

 

+) add는 되도록이면 처음 프래그먼트를 넣어줄때만 쓰시는게 좋습니다. 나머지는 전부 add가 아닌 replace를 쓰셔야 합니다.

(쓰는 방법은 똑같습니다^^)

'# 기타 공부한 것들 > Android' 카테고리의 다른 글

Nevigation View 만들기  (0) 2018.07.26
Toobar, appbar 경계선 없애기  (0) 2018.07.25
(MAC) Android Studio 단축키  (0) 2018.07.01
Android Project Review with BP(2)  (0) 2018.06.18
Android Project Review with BP(1)  (0) 2018.06.16

Unity에서 캐릭터, 즉 오브젝트를 움직일 수 있는 방법 몇 가지를 소개해 드리려고 합니다.

여러가지가 있는데 그 중에서 자주 쓰일법한 것만 적어 놓겠습니다.

 

1. Transform의 Position에 직접 접근

2. Transform의 Translate 사용

--------------------------------사실 여기까지가 사용하기도 쉽고 이해하기도 쉽습니다.

3. Rigidbody의 velocity설정 (이 부분은 오브젝트 움직임보다는 가속도 개념으로 접하시는게 더 좋을 것 같아요)

4. Character Controller이용

 


1. Position of Transform

직접 정의한 x, y, z를 가진 Vector2 or Vector3를 생성하시고(new) transform.position에 접근하여서 대입해줄수도 있고, 게임에 따라서 더하고 뺴주는 연산을 할 수 도 있습니다.


2. Translate of Transform

따로 설명이 필요 없겟죠?


3. velocity of Rigidbody

3-1

 

3-2

두번 째 방법은 AddForce메소드를 사용하는 방법입니다. (에러는 무시하세요.)


4. Character Controller 

 

마치며, 초보자 수준에서는 1, 2번째 방법이 편하고 다른 방법을 쓰지 않아도 게임이 잘 만들어집니다.

'# 기타 공부한 것들 > etc' 카테고리의 다른 글

ML 공부용 사이트들  (0) 2018.12.17
Google Colab GPU 사용  (0) 2018.11.27
Java Queue 간단 예제  (0) 2018.11.05
JAVA String reverse하기  (0) 2018.11.05
Jupiter notebook 단축키(MAC)  (0) 2018.07.25

안드로이드 스튜디오를 하면서 쓰는 단축키


cmd + / : 한줄 주석

cmd + B : 해당 단어가 선언되어 있는 곳으로 감. (setContentView의 xml에 포커싱을 주고 누르면 해당 레이아웃 파일로 가게 됨)

cmd + f12 : 파일 구조 보기

cmd + y : 정의된 부분 빠르게 보기(잘 모르는 메소드에 사용하면 어떻게 선언되어있는지 알 수 있음.)

cmd + d : 선택 블록을 복사하거나 해당 라인을 복사해준다.

cmd + p : 해당 메소드의 사용을 위해 필요한 파라미터를 표시해줌.

alt + cmd + / : 블록 주석

alt + cmd + L : 라인정리

ctrl + O : Override methods

ctrl + I : Implement methods

ctrl + space : 기본 단어 자동 완성 ( 맥의 단축키랑 중복되어서 변경함 )

shift + F6 : 이름 변경하기 ( 변수명 등 )

shift + cmd + 위 또는 아래 : 해당 메서드 안에서의 라인 이동

ctrl + shift + space : 타입 캐스팅( ex) Button button = (까지 입력하고 누르면 (Button)생성해줌)

f3 : 북마크 (숫자나 문자로 북마크 = alt + f3, ctrl + 숫자 or 문자로 이동)




'# 기타 공부한 것들 > Android' 카테고리의 다른 글

Nevigation View 만들기  (0) 2018.07.26
Toobar, appbar 경계선 없애기  (0) 2018.07.25
Fragment(프래그먼트) 만들기  (0) 2018.07.15
Android Project Review with BP(2)  (0) 2018.06.18
Android Project Review with BP(1)  (0) 2018.06.16

그림 및 예제들은 KMOOC 수업자료에서 가져왔습니다.


local minima, local minimum, global minima, global maximum



Satationary Point

단변수 함수 f(x)에서의 점 x0의 미분값이 0이라면 그 점을 stationary point, 정상점이라 정의합니다.

정상점이 주어졌을 때,

1. 2차 미분값이 양의 값을 가지면 국부 최소해가 됩니다.

2. 2차 미분값이 음의 값을 가지면 국부 최대해가 됩니다.

3. Hessian 행렬이 positive definite(convex)일 경우, 국소 최솟값이 됩니다.

4. Hessian 행렬이 negative definite(concave)일 경우, 국소 최댓값이 됩니다.

그림을 보면 Local minimum과 Local maximum을 정상점 및 2차미분값을 통해 알 수 있습니다. 

하지만 가운데 점은 최솟값인지 최댓값인지 구분하기가 어렵습니다. 

이를 안정점(saddle point)라고 부릅니다.

안정점이란, convex도 concave도 아닌 정상점을 뜻합니다.

여기서 알 수 있는 것은, 어떤 정상점에서 2차미분값이 0이거나 Hessian행렬이 영행렬일 경우에는 안장점 일수도 있고, 아닐 수도 있습니다.

(예시 확인)


binding & active

어떤 제약식이 있습니다. 그 제약식에 x0를 넣었더니 등식이 만족한다.(좌/우변이 같다)

이를 x0의 입장에서 제약식을 속박(binding)한다라고 표현합니다.

또한, 제약식의 입장에서는 x0의 지점에서 active(활성화) 또는 속박적이 된다고 표현하게 됩니다.


잠시! 우리가 convex와 concave를 따져가며 문제를 푸는 이유는 여러 가지가 있지만!

일반적으로 비선형 계획법은 두 가지 이유때문에 해를 구하기가 쉽지 않습니다.

1. convex, concave가 아닐경우

2. 실현가능한 해집합이 볼록집합이 아닐경우

하지만 위의 두 이유는 식의 특성만 잘 찾는다면 바로 풀리는 문제들입니다. 당연히 수학을 조금만 알아도 왜 우리가 convex와 concave가 

좋은지를 알 수 있습니다.


Lagrangian Function (Simple)

라그랑지안 승수법을 간단히만 설명하고 넘어가겠습니다. 다음 사진을 보시면 쉽게 이해가 가실 것입니다.

말 그대로 패널티를 주고싶다는 것입니다. 사실 panalty term의 b-g(x)는 제약식에 해당합니다.

하지만 우리가 가진 목적식이 이 제약식을 만족할 수 없다는 것이죠. 하지만 문제는 풀어야하고....

그 방법으로 제약식을 목적식으로 옮겨주는 것입니다. 

즉 제약선형계획법을 비제약선형계획법으로 변형하겠다는 것이지요.

목적식으로 옮겨서 제약을 없애는 대신에 패널티 값을 주게 됩니다. 

위의 예시는 최대화 문제이며 b-g(x)가 음의 값을 가지므로

패널티 변수인 람다가 0보다 크거나 같은 숫자를 가지게 되겟죠?

이때, 람다를 '라그랑지안 승수' 라고 부릅니다. 

라그랑지안 승수는 식변형에도 많이 사용하게 됩니다 ^^


KKT 조건(Karush-Kuhn-Tucker Conditions)

KKT에 대해서도 간단히 알아보고 넘어가도록 하겠습니다!


x0의 점이 KKT조건을 만족한다면

1. x0에 대한 라그랑지안 함수의 Gradient가 0이어야 합니다.

2. x0에서 라그랑지안 승수가 0이거나 제약식 b-g(x)가 0이어야 합니다. (쌍대이론에서의 상보여유정리와 비슷함)

3, 4. 실행 조건

그렇다면 KKT는 비선형계획법에서 어떤 의미를 가질까요??

어떠한 점 x0에서 KKT조건을 만족한다는 것은 x0이 최적해가 되기 위한 필수조건을 만족하였다는 의미입니다.

따라서, x0이 최적해가 되고싶다면 KKT조건을 전부 성립시켜야 한다는 말이죠.

그래서 KKT조건을 최적해의 필요조건이라고 합니다.

그 이유는 최적해가 아니지만 KKT를 만족하는 해가 있을수도 있기 떄문입니다. (필요충분조건이 안되는 이유)

하지만 convex거나 concave임이 이미 증명이 된 경우, 필요충분조건이 됩니다. 

어떤 x0의 지점에서 해를 찾았을 때, 여러분은 이미 그 해가 최소 local min 혹은 local max라는 것을 알기 떄문입니다. 

따라서 이때의 KKT조건은 여러분이 찾은 어떤 해의 최적성을 보장하는 충분조건이 되게 됩니다. (당연히 필수도 되겟죠?)




Reference


KMOOC


'# 기타 공부한 것들 > math' 카테고리의 다른 글

Measure theory  (1) 2018.07.26
Set theory  (0) 2018.07.26
Convexity(2)  (3) 2018.06.20
Convexity(1)  (4) 2018.06.20
Duality Thorey  (0) 2018.06.19