42Seoul c fgets() 함수 구현하기 get_next_line() 함수를 이용해 여러 개의 파일 디스크립터를 관리할 수 있어야 한다. "get_next_line.h" (코딩 도장 예제 참고) 파일 디스크립터, 버퍼, 읽을 바이트의 개수 해당 파일 디스크립터에서 바이트의 개수만큼 파일을 읽고, 버퍼에 저장한다. 파일 디스크립터(File Descriptor)란 리눅스 혹은 유닉스 계열의 시스템에서 프로세스(process)가 파일(f... C42Seoulget_next_line42Seoul [Born2beRoot] SSH (Secure Shell) 일반적인 서버는 리눅스 환경이기 때문에 좀 더 많은 설여(open-ssh 설치 등)이 필요할 수 있다. 키를 생성하는 방식이 두 가지가 있는데, ‘대칭키’와 ‘비대칭키(또는 공개 키)’ 방식이다. 비대칭키 방식에서는 서버 또는 사용자가 Key Pair(키 페어, 키 쌍)를 생성하며, 키 페어는 공개 키(public key)와 개인 키(private key)로 이루어진 한 쌍을 뜻한다. 예를 ... 42Seoul42Seoul [miniRT] #7 HIT Record 레이를 쏘았을 때 가장 먼저 마주친 물체에 대한 정보를 저장해서 이후에 충돌하게 되더라도 해당 픽셀에는 가장 먼저 부딪힌 물체를 렌더링하게끔 해야 한다. 카메라를 설정했을 때, 카메라에서 쏘는 광선이 구 안쪽면을 보는지, 바깥쪽 면을 보는지 검사해야 한다. **구 내부에 카메라가 있을 때** 위 그림처럼 내적의 결과가 양수이면 ray가 구 내부에 있다는 것을 알 수 있다. **구 외부에 카메... 42SeoulminiRT42Seoul [miniRT] #10 평면 구현 [추가] 서로 수직인 벡터를 내적하면 결과값이 0이 나온다는데, 생각해보면 당연한 결과다. 벡터 N은 인자로 제공되는 평면의 방향 벡터이다. 이 방향 벡터의 수직으로 평면은 뻗어나가고 있다. 바로 위에서 언급했던 것처럼 서로 수직인 두 벡터를 내적하면 0이 나온다는 사실을 우리는 알고 있다. 벡터 N과 수직인 벡터라고 함은 평면의 일부분인 P0과 평면을 지나고 있는 점 P를 이은 벡터, 벡터 P - ... 42SeoulminiRT42Seoul [miniRT] #8 Object 구조체 역시 와 동일하다. 원본 자료를 찾아보는 걸 추천한다. 현재 코드에서는 하나의 물체만 배치한 채 렌더링하고 있지만, 이제는 여러 물체를 배치해서 광선을 쏘고 가장 먼저 마추진 물체에 대해서 렌더링을 해주어야 한다. 여러가지 물체들을 배치하고 연결리스트로 하나하나 훑어가며 감지를 체크해보자. ray_color.c hit.c hit_sphere.c... 42SeoulminiRT42Seoul [42서울] ft_printf 고정인자를 읽어 % 를 만나기 전까지 출력 해당 서식지정자의 자료형에 맞게 참조, 출력 기본자료형 중에서 int보다 작은 자료형은 성능문제로 int크기로 저장하고 받는다.( int → char ) 포인터 자료형의 크기(int*, double*, char*) : 32비트 시스템 → 4 byte 64비트 시스템 → 8 byte 서식지정자의 길이 ☑️ %c 정수를 문자로 출력 자료형의 크기 : i... 42Seoulc언어printf42Seoul [miniRT] #9 Object 구조체 광원에서 출발한 빛 입자의 양은 항상 일정할 것이기 때문에, 빛이 도달한 미소 면적이 작을 수록 단위 면적당 도달한 빛 입자의 양은 많아질 것이고, 반대의 경우는 줄어들 것이다. 빛이 도달한 미소 면적이 가장 작을 때는 빛의 벡터가 교점의 법선 벡터와 일치할 때(사이각 0도)일 것이고, 사이각이 90도 이상이되면 미소 면적은 무한해지므로 빛 입자가 도달하지 못할 것이다. 이 때 두 벡터 A와... 42SeoulminiRT42Seoul [miniRT] #6 법선 구현 법선은 어떤 표면에 수직인 방향으로 뻗어나가는 벡터로, 광선과 구체가 부딪힌 지점에서 수직으로 뻗어나가는 벡터를 이용하면 구, 관성의 교점, 구의 중심을 나눠주면 정규화된 법선을 구할 수 있다. x, y 좌표를 알기에 우리는 피타고라스의 정리를 이용해서 삼각형의 빗면, 벡터의 길이를 구할 수 있다. a = \sqrt{x^2 + y^2} a=x2+y2 |A| = \sqrt{x^2 + y^2} ... 42SeoulminiRT42Seoul [miniRT] #4 코드 상에서의 레이 케스팅 [추가] 실습 자료에서는 카메라를 구현할 때 가로, 세로가 가변적으로 들어갈 수 있다고 가정하여 종횡비를 고려한 처리를 진행하고 카메라의 원점이나 벡터도 고려하지 않았다. 그러나 실제 과제에서 화면(window)의 크기를 지정하라는 문구는 없었고 카메라의 원점이나 벡터도 고려해주어야 하기 때문에 실습 자료의 소스 코드와 비교하면서 멘덴토리에 맞게끔 코드를 수정해볼 것이다. 각 픽셀 간의 간격을 1로 ... 42SeoulminiRT42Seoul [Born2beRoot] sudo 설정하기 sudo sudo 비밀번호 인증 시 최대 3번까지 시도 가능 sudo 인증 실패 시 커스텀 경고 메세지 출력 sudo 명령어 실행 시 로그를 /var/log/sudo에 저장 보안 상의 이유로 sudo 실행 시 사용할 수 있는 명령어 경로는 제한되어야 함 sudo 패키지 설치 sudo 패키시 설치 확인 sudo log 저장을 위한 디렉토리 생성 sudo 설정을 위햔 명령어 실행 mail_bad... 42Seoul42Seoul 스택, 힙, 오버로딩, friend키워드 new/delete, const c++ 은 힙에 정말 10개의 벡터공간이 할당되고 list 는 첫번째 벡터의 주소를 가리키게됨. 멤버변수 초기화 java, c# 은 클래스 초기화시 멤버변수 0으로 알아서 초기화함. c++ 은 초기화 안함. new/delete, malloc()/free() 차이점은 뭘까 하지만 new 는 type safe로 해당 객체에 맞는 포인터로 반환해준다. new 는 초기값 지정이 가능하다,즉 생성자 ... C42SeoulModulecpp42Seoul 인라인함수, static 키워드 인라인 함수의 동작 원리 사실상 복붙과 비슷 함수 호출하는 대신에 매크로 대신 인라인함수를 쓰는 이유 매크로는 디버깅하기 힘듬 콜스택에 함수이름이 안 보임 중단점도 설정 불가능 매크로는 범위를 준수하지않음(매크로는 글로벌) inline 함수 사용시 주의점 실제로는 인라인 안될수도있다. 컴파일러가 자기 맘대로 아무 함수나 인라인 할 수도 있음. 인라인 함수 구현이 헤더파일에 위치해야 함 복붙하... ModuleCcpp42Seoul42Seoul 가상소멸자, 다중상속, 추상클래스, 인터페이스, 캐스팅 모든 소멸자에는 언제나 virtual 키워드를 넣을것. 협업시에 내가만든 클래스를 누군가 상속해서 쓸 수도 있는데 그럴경우 일일이 컨트롤할 수 없기때문에.. 다형성 업캐스팅으로 다양한 클래스들을 하나의 배열로 컨트롤하는데에 유용함 순수 가상함수를 가지고 있는 베이스 클래스를 추상클래스라 함. 추상 클래스에서 개체를 만들 수 없음 추상 클래스를 포인터나 참조 형으로는 사용가능 c++은 자체적으... 42SeoulCModulecpp42Seoul [After Java Semina] 내부클래스와 람다식 Anonymous inner class = Anonymous class = 익명 [내부] 클래스 1.2 인트턴스 내부 클래스 해당 클래스를 포함하는 클래스(이하 외부클래스) 부터 선언하고, 이후 내부 클래스를 선언하는 방식으로 사용한다. +) 내부 클래스는 외부 클래스가 생성된 이후에 사용해야하기 때문에 클래스 생성 여부와 상관없이 사용할 수 있는 정적 변수와 정적 메서드를 포함할 수 없다.... Java42Seoul42Seoul [42서울] Libft Libc functions unsigned char 는 부호비트가 없기 때문에 모든 bit를 투명하게 볼 수 있다. → 따라서, 임의의 메모리에 바이트 단위로 접근해 값을 다룰 때, 반드시 unsigned char를 사용한다. const 로 선언된 변수는 값을 변경할 수 없고 변경시 컴파일 에러가 뜬다. *restrict 는 특정 메모리 영역에 접근 할 수 있는 포인터가 단 하나임을 보장하는... Libft42Seoul42Seoul [42서울] 가변인자 c언어에서 printf와 같이 매개변수의 갯수가 정해지지 않는 함수가 있다. 이렇게 함수에 들어가는 인수의 갯수가 변하는 것을 가변인자(가변 인수, variable argument)라고 한다. 헤더 : <stdarg.h> 사용법 : 고정 매개변수(필수인자)가 한 개 이상 있어야 한다. 고정 매개변수 뒤에 ... 을 붙여 매개변수의 개수가 정해지지 않았다는 표시를 해준다. 예를 들어, prin... 가변인자42Seoulc언어42Seoul
c fgets() 함수 구현하기 get_next_line() 함수를 이용해 여러 개의 파일 디스크립터를 관리할 수 있어야 한다. "get_next_line.h" (코딩 도장 예제 참고) 파일 디스크립터, 버퍼, 읽을 바이트의 개수 해당 파일 디스크립터에서 바이트의 개수만큼 파일을 읽고, 버퍼에 저장한다. 파일 디스크립터(File Descriptor)란 리눅스 혹은 유닉스 계열의 시스템에서 프로세스(process)가 파일(f... C42Seoulget_next_line42Seoul [Born2beRoot] SSH (Secure Shell) 일반적인 서버는 리눅스 환경이기 때문에 좀 더 많은 설여(open-ssh 설치 등)이 필요할 수 있다. 키를 생성하는 방식이 두 가지가 있는데, ‘대칭키’와 ‘비대칭키(또는 공개 키)’ 방식이다. 비대칭키 방식에서는 서버 또는 사용자가 Key Pair(키 페어, 키 쌍)를 생성하며, 키 페어는 공개 키(public key)와 개인 키(private key)로 이루어진 한 쌍을 뜻한다. 예를 ... 42Seoul42Seoul [miniRT] #7 HIT Record 레이를 쏘았을 때 가장 먼저 마주친 물체에 대한 정보를 저장해서 이후에 충돌하게 되더라도 해당 픽셀에는 가장 먼저 부딪힌 물체를 렌더링하게끔 해야 한다. 카메라를 설정했을 때, 카메라에서 쏘는 광선이 구 안쪽면을 보는지, 바깥쪽 면을 보는지 검사해야 한다. **구 내부에 카메라가 있을 때** 위 그림처럼 내적의 결과가 양수이면 ray가 구 내부에 있다는 것을 알 수 있다. **구 외부에 카메... 42SeoulminiRT42Seoul [miniRT] #10 평면 구현 [추가] 서로 수직인 벡터를 내적하면 결과값이 0이 나온다는데, 생각해보면 당연한 결과다. 벡터 N은 인자로 제공되는 평면의 방향 벡터이다. 이 방향 벡터의 수직으로 평면은 뻗어나가고 있다. 바로 위에서 언급했던 것처럼 서로 수직인 두 벡터를 내적하면 0이 나온다는 사실을 우리는 알고 있다. 벡터 N과 수직인 벡터라고 함은 평면의 일부분인 P0과 평면을 지나고 있는 점 P를 이은 벡터, 벡터 P - ... 42SeoulminiRT42Seoul [miniRT] #8 Object 구조체 역시 와 동일하다. 원본 자료를 찾아보는 걸 추천한다. 현재 코드에서는 하나의 물체만 배치한 채 렌더링하고 있지만, 이제는 여러 물체를 배치해서 광선을 쏘고 가장 먼저 마추진 물체에 대해서 렌더링을 해주어야 한다. 여러가지 물체들을 배치하고 연결리스트로 하나하나 훑어가며 감지를 체크해보자. ray_color.c hit.c hit_sphere.c... 42SeoulminiRT42Seoul [42서울] ft_printf 고정인자를 읽어 % 를 만나기 전까지 출력 해당 서식지정자의 자료형에 맞게 참조, 출력 기본자료형 중에서 int보다 작은 자료형은 성능문제로 int크기로 저장하고 받는다.( int → char ) 포인터 자료형의 크기(int*, double*, char*) : 32비트 시스템 → 4 byte 64비트 시스템 → 8 byte 서식지정자의 길이 ☑️ %c 정수를 문자로 출력 자료형의 크기 : i... 42Seoulc언어printf42Seoul [miniRT] #9 Object 구조체 광원에서 출발한 빛 입자의 양은 항상 일정할 것이기 때문에, 빛이 도달한 미소 면적이 작을 수록 단위 면적당 도달한 빛 입자의 양은 많아질 것이고, 반대의 경우는 줄어들 것이다. 빛이 도달한 미소 면적이 가장 작을 때는 빛의 벡터가 교점의 법선 벡터와 일치할 때(사이각 0도)일 것이고, 사이각이 90도 이상이되면 미소 면적은 무한해지므로 빛 입자가 도달하지 못할 것이다. 이 때 두 벡터 A와... 42SeoulminiRT42Seoul [miniRT] #6 법선 구현 법선은 어떤 표면에 수직인 방향으로 뻗어나가는 벡터로, 광선과 구체가 부딪힌 지점에서 수직으로 뻗어나가는 벡터를 이용하면 구, 관성의 교점, 구의 중심을 나눠주면 정규화된 법선을 구할 수 있다. x, y 좌표를 알기에 우리는 피타고라스의 정리를 이용해서 삼각형의 빗면, 벡터의 길이를 구할 수 있다. a = \sqrt{x^2 + y^2} a=x2+y2 |A| = \sqrt{x^2 + y^2} ... 42SeoulminiRT42Seoul [miniRT] #4 코드 상에서의 레이 케스팅 [추가] 실습 자료에서는 카메라를 구현할 때 가로, 세로가 가변적으로 들어갈 수 있다고 가정하여 종횡비를 고려한 처리를 진행하고 카메라의 원점이나 벡터도 고려하지 않았다. 그러나 실제 과제에서 화면(window)의 크기를 지정하라는 문구는 없었고 카메라의 원점이나 벡터도 고려해주어야 하기 때문에 실습 자료의 소스 코드와 비교하면서 멘덴토리에 맞게끔 코드를 수정해볼 것이다. 각 픽셀 간의 간격을 1로 ... 42SeoulminiRT42Seoul [Born2beRoot] sudo 설정하기 sudo sudo 비밀번호 인증 시 최대 3번까지 시도 가능 sudo 인증 실패 시 커스텀 경고 메세지 출력 sudo 명령어 실행 시 로그를 /var/log/sudo에 저장 보안 상의 이유로 sudo 실행 시 사용할 수 있는 명령어 경로는 제한되어야 함 sudo 패키지 설치 sudo 패키시 설치 확인 sudo log 저장을 위한 디렉토리 생성 sudo 설정을 위햔 명령어 실행 mail_bad... 42Seoul42Seoul 스택, 힙, 오버로딩, friend키워드 new/delete, const c++ 은 힙에 정말 10개의 벡터공간이 할당되고 list 는 첫번째 벡터의 주소를 가리키게됨. 멤버변수 초기화 java, c# 은 클래스 초기화시 멤버변수 0으로 알아서 초기화함. c++ 은 초기화 안함. new/delete, malloc()/free() 차이점은 뭘까 하지만 new 는 type safe로 해당 객체에 맞는 포인터로 반환해준다. new 는 초기값 지정이 가능하다,즉 생성자 ... C42SeoulModulecpp42Seoul 인라인함수, static 키워드 인라인 함수의 동작 원리 사실상 복붙과 비슷 함수 호출하는 대신에 매크로 대신 인라인함수를 쓰는 이유 매크로는 디버깅하기 힘듬 콜스택에 함수이름이 안 보임 중단점도 설정 불가능 매크로는 범위를 준수하지않음(매크로는 글로벌) inline 함수 사용시 주의점 실제로는 인라인 안될수도있다. 컴파일러가 자기 맘대로 아무 함수나 인라인 할 수도 있음. 인라인 함수 구현이 헤더파일에 위치해야 함 복붙하... ModuleCcpp42Seoul42Seoul 가상소멸자, 다중상속, 추상클래스, 인터페이스, 캐스팅 모든 소멸자에는 언제나 virtual 키워드를 넣을것. 협업시에 내가만든 클래스를 누군가 상속해서 쓸 수도 있는데 그럴경우 일일이 컨트롤할 수 없기때문에.. 다형성 업캐스팅으로 다양한 클래스들을 하나의 배열로 컨트롤하는데에 유용함 순수 가상함수를 가지고 있는 베이스 클래스를 추상클래스라 함. 추상 클래스에서 개체를 만들 수 없음 추상 클래스를 포인터나 참조 형으로는 사용가능 c++은 자체적으... 42SeoulCModulecpp42Seoul [After Java Semina] 내부클래스와 람다식 Anonymous inner class = Anonymous class = 익명 [내부] 클래스 1.2 인트턴스 내부 클래스 해당 클래스를 포함하는 클래스(이하 외부클래스) 부터 선언하고, 이후 내부 클래스를 선언하는 방식으로 사용한다. +) 내부 클래스는 외부 클래스가 생성된 이후에 사용해야하기 때문에 클래스 생성 여부와 상관없이 사용할 수 있는 정적 변수와 정적 메서드를 포함할 수 없다.... Java42Seoul42Seoul [42서울] Libft Libc functions unsigned char 는 부호비트가 없기 때문에 모든 bit를 투명하게 볼 수 있다. → 따라서, 임의의 메모리에 바이트 단위로 접근해 값을 다룰 때, 반드시 unsigned char를 사용한다. const 로 선언된 변수는 값을 변경할 수 없고 변경시 컴파일 에러가 뜬다. *restrict 는 특정 메모리 영역에 접근 할 수 있는 포인터가 단 하나임을 보장하는... Libft42Seoul42Seoul [42서울] 가변인자 c언어에서 printf와 같이 매개변수의 갯수가 정해지지 않는 함수가 있다. 이렇게 함수에 들어가는 인수의 갯수가 변하는 것을 가변인자(가변 인수, variable argument)라고 한다. 헤더 : <stdarg.h> 사용법 : 고정 매개변수(필수인자)가 한 개 이상 있어야 한다. 고정 매개변수 뒤에 ... 을 붙여 매개변수의 개수가 정해지지 않았다는 표시를 해준다. 예를 들어, prin... 가변인자42Seoulc언어42Seoul