[Cub3D] DDA 알고리즘 vs Bresenham 알고리즘
·
42Seoul/Cub3D
DDA (Digital Differential Analyzer) 알고리즘 DDA는 컴퓨터 그래픽에서 직선, 삼각형 또는 다각형을 형성하기 위해 직선을 그리는 데 사용된다. DDA는 한 좌표의 일정한 간격으로 라인을 따라 샘플을 정수로 분석하고 다른 좌표에 대해서는 라인에 가장 가까운 정수를 반올림한다. 따라서 선이 진행됨에 따라 첫 번째 정수 좌표를 스캔하고 두 번째 정수를 가장 가까운 정수로 반올림한다. 따라서 x 좌표에 DDA를 사용하여 그린 선은 x0 ~ x1이지만 y 좌표의 경우 y = ax + b가되고 함수를 그리려면 Fn (x, y 반올림)이된다. Bresenham 알고리즘 Bresenham Algorithm은 1962 년 J.E. Bresenham에 의해 개발되었으며 DDA보다 훨씬 정확하고..
[C] printf() 구현하기 (2) - format
·
42Seoul/Printf
format 다양한 자료형 변수를 문자열로 변환하는 방식을 지정해주는 형식 문자열(format string)인 문자열 변수를 받아들인다. 형식 지정자 설명 d,i 부호 있는 10진 정수 u 부호 없는 10진 정수 o 부호 없는 8진 정수 x 부호 없는 16진 정수(소문자) X 부호 없는 16진 정수(대문자) f 실수를 소수점으로 표기(소문자) F 실수를 소수점으로 표기(대문자) e 실수 지수 표기법 사용(소문자) E 실수 지수 표기법 사용(대문자) g %f와 %e 중에서 짧은 것을 사용(소문자) G %F와 %E 중에서 짧은 것을 사용(대문자) a 실수를 16진법으로 표기(소문자) A 실수를 16진법으로 표기(대문자) c 문자 s 문자열 p 포인터의 메모리 주소 n %n 부분에 int 포인터를 넣으면 지금..
[C] printf() 구현하기 (1) - introduction (가변 인자)
·
42Seoul/Printf
c언어를 공부하다보면 printf()가 함수임을 알게되고, 매개변수가 가변적으로 들어갈 수 있다는 것에 의문이 든다. printf()는 인자를 1개, 2개, 3개, ..... 몇 개를 넣어도 문제없이 돌아간다. 이것을 가능하게 해주는 것이 가변 인자라는 것이다. printf의 프로토타입을 보면 아래와 같다. int ft_printf(const char *, ...); 이 매개변수 중 ...이 가변 인자이다. 가변 인자(Variadic Arguments)란? 보통 함수에서 가변 인자를 정의할 때는 고정 매개변수가 한 개 이상 있어야 하며, 고정 매개변수 뒤에 ...을 붙여 매개변수의 개수가 정해지지 않았다는 표시를 해준다. 단, ... 뒤에는 다른 매개변수를 지정할 수 없다. 가변인자에 관련된 변수는 #i..
[C] get_next_line 구현하기 (2) - 구현
·
42Seoul/Get Next Line
Get Next Line #include "get_next_line.h" static int proc_remain(char **line, char **store, char *tmp_ptr) { char *tmp; if (tmp_ptr) { *line = ft_strndup(*store, tmp_ptr - *store); tmp = ft_strndup(tmp_ptr + 1, ft_strlen(tmp_ptr + 1)); free(*store); *store = tmp; return (_SUC_READ); } if (*store) { *line = *store; *store = NULL; } else *line = ft_strndup("", 1); return (_EOF); } int get_next_line..
[C] get_next_line 구현하기 (1) - get next line 이란?
·
42Seoul/Get Next Line
Get Next Line 주어진 file discripter에 해당하는 file로부터 라인단위(개행 문자로 구분)로 글을 읽어온다. 함수를 한 번 호출할 때 마다, 한 줄씩 글을 읽는다. 읽기 성공하면 1, EOF(End of File)에 다다르면 0, error 발생 시 -1 반환 file discripter wonillism.tistory.com/166 [C] file discriptor (파일 디스크립터) 파일 디스크립터란? 특정한 파일에 접근하기 위한 추상적인 키이다. 일반적으로 POSIX 운영체제에 쓰인다. POSIX에서 파일 디스크립터는 정수이다. 표준 POSIX 파일 서술자 0 : 표준 입력(stdin) 1 : 표�� wonillism.tistory.com read() size_t read(..
[C] 나만의 라이브러리 - substr, strjoin, strtrim, itoa
·
42Seoul/Libft
1. substr 함수 형태 char *my_substr(char const *s, unsigned int start, size_t len); 매개 변수 원본 문자열 문자열 s에 있는 하위 문자열의 시작점 하위 문자열의 길이 반환 값 잘라낸 문자열, 실패시 NULL 반환 설명 malloc(3)를 사용하여 할당하고 문자열 's'에서 하위 문자열을 반환. 하위 문자열은 인덱스 'start'에서 시작되며 최대 크기 'len' 소스 코드 #include "libmy.h" char *my_substr(char const *s, unsigned int start, size_t len) { size_t i; size_t len_s; char *ret; if (!s) retu..
[C] 나만의 라이브러리 - split 함수 구현
·
42Seoul/Libft
split 함수 형태 char **my_split(char const *s, char c); 매개 변수 분할할 문자열 구분 기호 문자 반환 값 분할한 새 문자열 배열, 할당 실패시 NULL 반환 설명 malloc(3)로 할당하고 문자 'c'를 구분 기호로 사용하여 's'를 분할하여 얻은 문자열 배열을 반환하십시오. 배열을 NULL 포인터로 종료해야 함 소스 코드 #include "libmy.h" static int get_row(char const *s, char c) { size_t i; size_t ret; i = 0; ret = 0; while (s[i]) { if (s[i] != c && (s[i + 1] == c || !s[i + 1])) ret++; i++; } return (ret); } s..
[C] 나만의 라이브러리 - atoi, isalpha, isdigit, isalnum, isascii, isprint, toupper, tolower
·
42Seoul/Libft
1. atoi int my_atoi(const char *str); 주어지는 문자열에 연속되는 숫자가 있을 때, 그 숫자를 int형으로 바꾸는 함수 int my_atoi(const char *str) { long sign; long res; while ((*str >= 9 && *str 2147483648) return (0); if (sign == 1 && res > 2147483647) return (-1); str++; } return (sign * res); } 공백(white space) 제거 + or - 가 있을 때 부호 지정 (연속 된다면 0 반환) 연속되는 문자형 숫자를 int형으로 변환 후 부호와 값을 곱하여 반환 2. isalpha int my_isalpha(int c); 매개변수값이 ..
WONILLISM
'42Seoul' 카테고리의 글 목록 (3 Page)