책 소개
소스 파일은 아래 깃허브 페이지에서 내려 받으실 수 있습니다.
(https://github.com/AcornPublishing/python-playground)
요약
이 책은 상상력을 동원하여 파이썬으로 재미있는 프로그램을 작성하는 예제들을 보여준다. 인기 있는 파이썬 라이브러리 및 OpenGL 라이브러리를 사용해 매개변수 방정식을 활용한 곡선 그리기, 생명체 시뮬레이션, 포토모자이크, 3D 애니메이션 생성 등의 프로그래밍을 실습해볼 수 있다. 마지막으로 아두이노 및 라즈베리파이와 함께 사용하는 방법을 소개하며 파이썬의 다양한 활용법을 보여준다.
이 책에서 다루는 내용
■ 매개변수 방정식과 turtle 모듈로 스파이로그래프와 비슷한 패턴 생성
■ 주파수 배음 시뮬레이션을 이용한 음악 작곡
■ 아스키 아트로 그래픽 이미지 변환
■ 임의의 패턴에 숨겨진 3D 이미지를 생성하는 오토스테레오그램 프로그램 작성
■ 입자 시스템, 투명도, 빌보딩 기법을 이용해 OpenGL 셰이더로 현실감 있는 애니메이션 제작
■ CT와 MRI 스캔으로 얻은 데이터를 사용한 3D 시각화 구축
■ 컴퓨터와 아두이노를 연결해 음악에 반응하는 레이저 쇼 연출
이 책의 대상 독자
이 책은 파이썬을 처음으로 접하는 사람을 대상으로 하지 않으며, 기초 지식을 친절하게 설명하지는 않는다. 하지만 현실 세계의 다양한 문제를 해결하기 위해 파이썬을 어떻게 사용할 수 있는지 구체적인 방법을 보여준다. 이 책의 프로젝트들을 실습하면서 여러분은 파이썬 언어의 미묘한 사용법을 접할 수 있으며 널리 쓰이는 파이썬 라이브러리들의 사용 방법도 배울 수 있다. 가장 중요한 것은, 어떤 문제를 여러 부분으로 나누고 문제를 해결하기 위한 알고리즘을 개발한 뒤, 파이썬을 사용해 기초부터 해결책을 구현하는 방법을 배울 수 있다는 점이다. 현실 세계의 문제들은 경계가 명확하지 않고 특정 분야의 전문적인 지식을 요구하기 때문에 해결하기 어려울 때가 많다. 하지만 파이썬은 문제 해결을 도와주는 다양한 도구를 제공한다. 어려움을 극복하고 문제의 해결책을 찾을 줄 아는 것은 프로그래밍의 고수가 되기 위한 여행에서 가장 중요한 부분이다.
이 책의 구성
1부: 워밍업
1장, ‘아이튠즈 재생목록 다루기’에서는 아이튠즈(iTunes)의 재생목록 파일을 파싱해 트랙 길이와 공통 트랙 등 유용한 정보를 수집하는 방법을 보여준다. 2장, ‘스파이로그래프’에서는 매개변수 방정식과 turtle 그래픽 모듈을 사용해 스파이로그래프와 유사한 곡선을 그려볼 것이다.
2부: 생명체 시뮬레이션
2부에서는 어떤 현상을 시뮬레이션하기 위해 수학적 모델을 사용한다. 3장, ‘콘웨이의 생명게임’에서는 콘웨이의 생명게임 알고리즘을 구현하는 방법을 배운다. 이 알고리즘은 일종의 인공 생명 시뮬레이션으로서 동적 패턴을 생성할 수 있다. 4장, ‘카플러스 스트롱 알고리즘을 이용한 배음 생성’에서는 카플러스 스트롱(Karplus-Strong) 알고리즘을 사용해 현악기의 현이 튕길 때 나는 소리를 생성하는 방법을 보여준다. 그다음 5장, ‘보이즈: 군집 시뮬레이션’에서는 새의 무리를 시뮬레이션하는 보이즈(Boids) 알고리즘을 구현하는 방법을 배울 수 있다.
3부: 이미지 갖고 놀기
3부는 파이썬으로 2D 이미지를 읽고 조작하는 방법을 소개한다. 6장, ‘아스키 아트’에서는 이미지로부터 아스키 아트를 만드는 방법을 보여준다. 7장, ‘포토모자이크’에서는 포토모자이크를 생성하며, 8장, ‘오토스테레오그램’에서는 3D 이미지 환상을 생성하는 오토스테레오그램을 생성하는 방법을 배울 것이다.
4부: 3D 입문
4부의 프로젝트들은 OpenGL 3D 그래픽 라이브러리를 사용한다. 9장, ‘OpenGL의 이해’에서는 OpenGL을 사용해 간단한 3D 그래픽을 만드는 기초 개념을 설명한다. 10장, ‘입자 시스템’에서는 입자 시뮬레이션을 생성하는데, 수학적 지식과 OpenGL 셰이더를 사용해 입자의 이동 경로를 계산하고 화면에 불꽃 분수를 렌더링한다. 그리고 11장, ‘볼륨 렌더링’에서는 볼륨 데이터를 렌더링할 때 사용되는 볼륨 레이 캐스팅 알고리즘을 OpenGL 셰이더를 사용해 구현한다. 이 기법은 MRI나 CT 스캔 같은 의료 영상에 널리 사용된다.
5부: 하드웨어 해킹
마지막 5부에서는 파이썬을 사용해 아두이노 마이크로컨트롤러와 라즈베리파이를 탐구한다. 12장, ‘아두이노 소개’에서는 아두이노를 사용해 간단한 회로로부터 센서 데이터를 읽고 그래프로 나타낸다. 13장, ‘레이저 오디오 디스플레이’에서는 파이썬과 아두이노를 사용해 음악 소리에 반응하는 레이저쇼를 연출하기 위해서 2개의 회전 거울과 레이저를 제어한다. 14장, ‘라즈베리파이 기반의 날씨 모니터’에서는 웹 기반의 날씨 모니터링 시스템을 라즈베리 파이를 사용해 구축한다.
목차
목차
- 1부. 워밍업
- 1장. 아이튠즈 재생목록 다루기
- 아이튠즈 재생목록 파일 분석
- 요구사항
- 코드
- 중복곡 찾기
- 중복곡 추출하기
- 둘 이상의 재생목록에 공통되는 트랙 찾기
- 통계 값 수집하기
- 데이터를 플롯으로 나타내기
- 명령 라인 옵션
- 전체 코드
- 프로그램 실행
- 정리
- 실습!
- 2장. 스파이로그래프
- 매개변수 방정식
- 스파이로그래프의 방정식
- turtle 모듈의 그래픽
- 요구사항
- 코드
- Spiro 생성자
- 초기설정을 수행하는 함수들
- restart() 메소드
- draw() 메소드
- 애니메이션 만들기
- SpiroAnimator 클래스
- genRandomParams() 메소드
- 프로그램 재시작
- update() 메소드
- 커서를 보이거나 숨기기
- 곡선 저장하기
- 명령 라인 인수 파싱과 초기화
- 전체 코드
- 스파이로그래프 애니메이션 실행
- 정리
- 실습!
- 매개변수 방정식
- 2부. 생명체 시뮬레이션
- 3장. 콘웨이의 생명게임
- 동작 원리
- 요구사항
- 코드
- 그리드 표현하기
- 초기 조건
- 경계 조건
- 규칙 구현하기
- 프로그램에 명령 라인 인수 전달하기
- 시뮬레이션 초기화하기
- 전체 코드
- 생명게임 시뮬레이션 실행
- 정리
- 실습!
- 4장. 카플러스 스트롱 알고리즘을 이용한 배음 생성
- 동작 원리
- 시뮬레이션
- WAV 파일 생성하기
- 단 5음계
- 요구사항
- 코드
- deque로 원형 버퍼 구현하기
- 카플러스 스트롱 알고리즘 구현하기
- WAV 파일 기록하기
- pygame으로 WAV 파일 재생하기
- main() 메소드
- 전체 코드
- 시뮬레이션 실행
- 정리
- 실습!
- 동작 원리
- 5장. 보이즈: 군집 시뮬레이션
- 동작 원리
- 요구사항
- 코드
- 새들의 위치 및 속도 계산하기
- 경계 조건 설정하기
- 새 그리기
- 규칙 적용하기
- 새 추가하기
- 새들을 분산시키기
- 명령 라인 인수
- Boids 클래스
- 전체 코드
- 보이즈 시뮬레이션 실행
- 정리
- 실습!
- 3부. 이미지 갖고 놀기
- 6장. 아스키 아트
- 동작 원리
- 요구사항
- 코드
- 그레이스케일 레벨과 그리드 정의하기
- 평균 밝기 계산하기
- 이미지로부터 아스키 콘텐츠 생성하기
- 명령 라인 옵션
- 아스키 아트 문자열을 텍스트 파일에 기록하기
- 전체 코드
- 아스키 아트 생성 프로그램 실행
- 정리
- 실습!
- 7장. 포토모자이크
- 동작 원리
- 타깃 이미지 분할하기
- 색상 값의 평균 구하기
- 이미지 대조하기
- 요구사항
- 코드
- 타일 이미지 읽기
- 입력 이미지의 평균 색상 값 계산하기
- 타깃 이미지 분할하기
- 타일과 가장 비슷한 이미지 찾기
- 이미지 그리드 생성하기
- 포토모자이크 생성하기
- 명령 라인 옵션 추가하기
- 포토모자이크의 크기 제어하기
- 전체 코드
- 포토모자이크 생성 프로그램 실행
- 정리
- 실습!
- 동작 원리
- 8장. 오토스테레오그램
- 동작 원리
- 오토스테레오그램 내의 깊이 지각하기
- 깊이맵
- 요구사항
- 코드
- 주어진 타일 반복하기
- 임의의 원으로 타일 생성하기
- 오토스테레오그램 만들기
- 명령 라인 옵션
- 전체 코드
- 오토스테레오그램 생성 프로그램 실행
- 정리
- 실습!
- 동작 원리
- 4부. 3D 입문
- 9장. OpenGL의 이해
- 올드스쿨 OpenGL
- 현대적인 OpenGL: 3D 그래픽 파이프라인
- 지오메트리 프리미티브
- 3D 변환
- 셰이더
- 버텍스 버퍼
- 텍스처 매핑
- OpenGL을 화면에 표시하기
- 요구사항
- 코드
- OpenGL 창 생성하기
- 콜백 설정하기
- Scene 클래스
- 전체 코드
- OpenGL 애플리케이션 실행
- 정리
- 실습!
- 10장. 입자 시스템
- 동작 원리
- 입자의 움직임 모델링하기
- 최대 스프레드 설정하기
- 입자를 렌더링하기
- 현실적인 스파크를 생성하기 위해 OpenGL 블렌딩 사용하기
- 빌보딩 사용하기
- 애니메이션 생성하기
- 요구사항
- 입자 시스템을 구현하는 코드
- 입자의 지오메트리 정의하기
- 입자들의 시간차 배열 정의하기
- 입자의 초기 속도 설정하기
- 버텍스 셰이더 생성하기
- 프래그먼트 셰이더 생성하기
- 렌더링
- Camera 클래스
- 입자 시스템의 전체 코드
- 박스 코드
- 메인 프로그램의 코드
- 시간 단계별로 입자 갱신하기
- 키보드 핸들러
- 메인 프로그램 루프 관리하기
- 메인 프로그램의 전체 코드
- 프로그램 실행
- 정리
- 실습!
- 동작 원리
- 11장. 볼륨 렌더링
- 동작 원리
- 데이터 포맷
- 광선 생성하기
- OpenGL 창 표시하기
- 요구사항
- 프로젝트 코드의 개요
- 3D 텍스처 생성하기
- 3D 텍스처의 전체 코드
- 광선 생성
- 컬러 큐브의 지오메트리 정의하기
- 프레임 버퍼 객체 생성하기
- 큐브의 후면 렌더링하기
- 큐브의 전면 렌더링하기
- 큐브 전체를 렌더링하기
- 크기 변경 핸들러
- 광선 생성의 전체 코드
- 볼륨 레이 캐스팅
- 버텍스 셰이더
- 프래그먼트 셰이더
- 볼륨 레이 캐스팅의 전체 코드
- 2D 슬라이싱
- 버텍스 셰이더
- 프래그먼트 셰이더
- 2D 슬라이싱을 위한 사용자 인터페이스
- 2D 슬라이싱의 전체 코드
- 코드 종합
- 메인 파일의 전체 코드
- 프로그램 실행
- 정리
- 실습!
- 동작 원리
- 5부. 하드웨어 해킹
- 12장. 아두이노 소개
- 아두이노
- 아두이노 생태계
- 언어
- IDE
- 커뮤니티
- 주변장치
- 요구사항
- 광센서 회로 구축
- 회로의 동작 원리
- 아두이노 스케치
- 실시간 그래프 생성하기
- 파이썬 코드
- 전체 파이썬 코드
- 프로그램 실행
- 정리
- 실습!
- 13장. 레이저 오디오 디스플레이
- 레이저 패턴 생성
- 모터 제어
- 고속 푸리에 변환
- 요구사항
- 레이저 디스플레이 만들기
- 모터 드라이버 배선하기
- 아두이노 스케치
- 아두이노의 디지털 출력 핀 설정하기
- 메인 루프
- 모터 정지하기
- 파이썬 코드
- 오디오 장치 선택하기
- 입력 장치로부터 데이터 읽기
- 데이터 스트림의 FFT 계산하기
- FFT 값에서 주파수 정보 추출하기
- 주파수를 모터 속도와 방향으로 변환하기
- 모터 설정 테스트하기
- 명령 라인 옵션
- 수동 테스트
- 전체 파이썬 코드
- 프로그램 실행
- 정리
- 실습!
- 레이저 패턴 생성
- 14장. 라즈베리파이 기반의 날씨 모니터
- 하드웨어
- DHT11 온도 및 습도 센서
- 라즈베리파이
- 라즈베리파이 설정하기
- 소프트웨어 설치와 구성
- 운영체제
- 초기 설정
- 와이파이 설정
- 프로그래밍 환경 설정하기
- SSH를 통한 연결
- 보틀 웹 프레임워크
- flot으로 그래프 그리기
- 라즈베리파이 종료하기
- 하드웨어 제작
- 코드
- 센서 데이터 요청 처리하기
- 데이터를 그래프로 나타내기
- update() 메소드
- LED를 처리하는 자바스크립트 핸들러
- 대화식 기능 추가하기
- 전체 코드
- 프로그램 실행
- 정리
- 실습!
- 하드웨어
- 부록 A. 소프트웨어 설치
- 프로젝트의 소스 코드 설치
- 윈도우에 설치하기
- GLFW 설치
- 각 모듈별로 사전에 빌드된 바이너리 설치
- 그 밖의 옵션들
- OS X에 설치하기
- Xcode와 MacPorts 설치
- 모듈 설치
- 리눅스에 설치하기
- 부록 B. 실용 전자공학의 기초
- 일반적인 부품
- 필수 도구
- 회로 제작
- 더 많은 내용 배우기
- 부록 C. 라즈베리파이 팁
- 와이파이 설정
- 라즈베리파이 연결 여부 검사
- 와이파이 어댑터의 절전 모드 방지
- 라즈베리파이의 코드와 데이터 백업
- 라즈베리파이 전체 OS 백업
- SSH로 라즈베리파이에 로그인
- 라즈베리파이 카메라 사용
- 라즈베리파이의 사운드 활성화
- 라즈베리파이의 텍스트-음성 변환 기능 사용
- HDMI 사용
- 라즈베리파이를 모바일 기기로 만들기
- 라즈베리파이 하드웨어의 버전 확인
관련 블로그 글
파이썬을 사용한다면 꼭 필요한 문제별 맞춤 솔루션
파이썬은 네덜란드 개발자 귀도 반 로섬(Guido van Rossum)이 만든 언어로,
C 언어를 기반으로 빠른 속도, 안정성, 확장성을 제공하는 오픈소스 프로그래밍 언어다.
문법이 간결하고 직관적이기 때문에 초보자도 쉽게 배울 수 있는데,
그 때문에 수많은 개발자, 엔지니어, 데이터 과학자, 취미로 개발하는 사람 등 모두가 선호하는 프로그래밍 언어기도 하다.
파이썬의 특징
간결한 문법으로 입문자가 이해하기 쉽다.
라이브러리가 풍부해 다양한 용도로 확장할 수 있다.
프로토타입을 작성해 실제 작동 여부를 바로 확인할 수 있다.
라이브러리를 사용해 느린 속도를 보완할 수 있다.
유지보수 및 관리가 쉽다.
높은 가독성과 생산성
파이썬은 현재 가장 많은 관심을 받는 언어 중 하나이며,
누구든 쉽게 배울 수 있고 필요한 목적에 따라 다양하게 활용할 수 있기
때문에
웹 개발뿐만 아니라 데이터 분석, 머신 러닝, 그래픽, 학술 연구 등 여러 분야에서 활용되고 있다.
또한 파이썬은 대형 글로벌 기업부터 스타트업까지 다양하고 안정적으로 활용되고 있으며,
여러 업계에서 선호하는 언어로 꾸준히 성장하고 있다.
이미 파이썬의 기초와 활용을 다루는 책은 많다.
하지만 실제로 파이썬을 사용하면서 맞닥뜨릴 수 있는 상황을 제시하고 해결 방법을 알려주는 책은 많지 않다.
이 책은 기초 개념부터 복잡한 응용까지 광범위한 파이썬 3 프로그램 구현 방법을 설명한다.
자료 구조, 객체지향, 함수형 프로그래밍, 통계 프로그래밍 등 주제별로 효율적인 파이썬 프로그래밍 기법을 다루고 있다.
웹 개발자, 프로그래머, 엔터프라이즈 프로그래머, 엔지니어,
빅데이터 과학자를 대상으로 하며,
각각의 레시피별로 특정 문제 및 이슈를 해결하는 방법을 보여주는 접근
방식을 취하고 있어
상황 별로 문제 해결책을 제시하고 있기 때문에 굳이 처음부터 읽지 않고
필요한 부분만 선택적으로 읽어도 무방하다.
이 책에서 제시하는 일련의 레시피를 따라 하면서 구체적인 상황에서의 프로그래밍
언어 도는 표준 라이브러리의 기능을 더 쉽게 이해할 수 있으며,
특정 주제별로 파이썬 언어 기능에 관한 통찰력을 얻을 수 있다.
보자라면 이 책으로 파이썬을 시작할 수 있으며, 중급 이상이라면 지식 기반을 확장할 수 있다.
준비가 됐다면, <모던 파이썬 쿡북>과 함께 즐겁게 파이썬 개발을 시작해보자!
크리에이티브 커먼즈 라이센스 이 저작물은 크리에이티브 커먼즈 코리아 저작자표시 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.