Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Pol_Grem_-_ANSI_Common_Lisp_High_tech_-_2012.pdf
Скачиваний:
28
Добавлен:
12.03.2016
Размер:
4.85 Mб
Скачать

168

Глава 9. Числа

Полно­цен­ный­ трасси­ров­щик­ лучей­ в состоя­нии­ гене­ри­ро­вать­ куда­ бо­ лее сложные­ изобра­же­ния­ с учетом­ несколь­ких­ источ­ни­ков­ света­ раз­ ной интен­сив­но­сти,­ распо­ло­жен­ных­ в произ­воль­ных­ точках­ простран­­ ства­. Для этого­ програм­ма­ долж­на учиты­вать­ эффек­ты­ отбра­сы­ва­ния­ теней­. Распо­ло­же­ние­ источ­ни­ка­ света­ рядом­ с глазом­ наблю­да­те­ля­ по­ зволи­ло­ нам суще­ст­вен­­но упро­стить­ зада­чу,­ так как в этом случае­ ни одна­ из отбра­сы­вае­мых­ теней­ не попа­да­ет­ в поле­ види­мо­сти­.

Кроме­ того,­ полно­цен­ный­ трасси­ров­щик­ должен­ учиты­вать­ вторич­ные­ отра­же­ния­. Разу­ме­ет­ся,­ объек­ты­ различ­ных­ цветов­ будут­ отра­жать­ свет по-разно­му­. Тем не менее­ основ­ной­ алго­ритм,­ представ­лен­ный­ на рис. 9.3, предос­тав­ля­ет­ меха­низм­ трасси­ров­ки,­ кото­рый­ в дальней­шем­ может­ быть улучшен­ и допол­нен,­ напри­мер­ с помо­щью­ рекур­сив­но­го­ исполь­­ зова­ния­ уже имеющих­ся­ мето­дов­.

Кроме­ того,­ реаль­ная­ програм­ма­-трасси­ров­щик­ долж­на быть тщатель­­ но опти­ми­зи­ро­ва­на­. Наша­ програм­ма­ имеет­ сжатые­ разме­ры­ и не опти­­ мизи­ро­ва­на­ ни как Лисп-програм­ма,­ ни как трасси­ров­щик­ лучей­. До­ бавле­ние­ к програм­ме­ одних­ только­ декла­ра­ций­ inline и декла­ра­ций­ типов­ (см. раздел 13.3) может­ обеспе­чить­ более­ чем двукрат­ный­ при­ рост произ­во­ди­тель­но­сти­.

Итоги главы

1.Common Lisp предос­тав­ля­ет­ в распо­ря­же­ние­ целые­ числа,­ рацио­­ нальные­ дроби,­ числа­ с плаваю­щей­ запя­той­ и комплекс­ные­ числа­.

2.Число­вые­ значе­ния­ могут­ быть преоб­ра­зо­ва­ны­ или упро­ще­ны,­ а их компо­нен­ты­ могут­ быть извле­че­ны­.

3.Преди­ка­ты­ сравне­ния­ чисел­ при­нима­ют­ любое­ коли­че­ст­во­ аргу­мен­­ тов и после­до­ва­тель­но­ сравни­ва­ют­ их пары,­ за исклю­че­ни­ем­ /=, ко­ торый­ сравни­ва­ет­ все возмож­ные­ пары­ аргу­мен­тов­.

4.В Common Lisp представ­ле­ны­ практи­че­ски­ все функции,­ имеющие­­ ся в низко­уров­не­вом­ инже­нер­ном­ кальку­ля­то­ре­. Одни­ и те же функ­ ции могут­ приме­нять­ся­ к аргу­мен­там­ любых­ типов­.

5.Числа­ типа­ fixnum – неболь­шие­ целые­ числа,­ умещаю­щие­ся­ в одном­ машин­ном­ слове­. При необ­хо­ди­мо­сти­ они без преду­пре­ж­де­ния­ пре­ обра­зу­ют­ся­ к типу­ bignum. Одна­ко­ затра­ты­ на его исполь­зо­ва­ние­ су­ щест­вен­­но выше­. Common Lisp так­же предос­тав­ля­ет­ до 4-х типов­ чи­ сел с плаваю­щей­ запя­той­. Для каждой­ реали­за­ции­ огра­ни­че­ния­ на их размер­ свои и могут­ быть полу­че­ны­ из специ­аль­ных­ констант­.

6.Трасси­ров­щик­ лучей­ гене­ри­ру­ет­ изобра­же­ние,­ отсле­жи­вая­ прохо­ж­­ дение­ света­ через­ смоде­ли­ро­ван­ный­ мир и вычис­ляя­ интен­сив­ность­ излу­че­ния­ для каждо­го­ пиксе­ла­ изобра­же­ния­.

Упражнения

169

Упражнения

1. Опре­де­ли­те­ функцию,­ прини­маю­щую­ список­ дейст­ви­тель­ных­ чисел­ и возвра­щаю­щую­ исти­ну,­ когда­ числа­ следу­ют­ в поряд­ке­ неубы­­ва­ ния.

2. Опре­де­ли­те­ функцию,­ прини­маю­щую­ цело­чис­лен­ную­ вели­чи­ну­ (ко­ личе­ст­во­ центов)­ и возвра­щаю­щую­ четы­ре­ значе­ния,­ пока­зы­ваю­­ щие, как собрать­ задан­ную­ сумму­ с помо­щью­ монет­ стоимо­стью­ 25, 10, 5 и 1 цент, исполь­зуя­ наимень­шее­ их коли­че­ст­во­.

3. На очень дале­кой­ плане­те­ живут­ два вида­ существ:­ вигглы­ и вобб­ лы. И первые,­ и вторые­ оди­нако­во­ хоро­шо­ поют­. Каждый­ год на этой плане­те­ прово­дит­ся­ гранди­оз­ное­ сорев­но­ва­ние,­ по резуль­та­там­ кото­­ рого­ выби­ра­ют­ десять­ лучших­ певцов­. Вот резуль­та­ты­ за прошед­­ шие десять­ лет:

Год

1

2

3

4

5

6

7

8

9

10

Вигглы­

6

5

6

4

5

5

4

5

6

5

Воблы­

4

5

4

6

5

5

6

5

4

5

 

 

 

 

 

 

 

 

 

 

 

Напи­ши­те­ програм­му,­ симу­ли­рую­щую­ подоб­ные­ сорев­но­ва­ния­. Оп­ реде­ли­те­ по резуль­та­ту­ вашей­ програм­мы,­ дейст­ви­тель­но­ ли жюри­ каждый­ год выби­ра­ет­ десять­ самых­ лучших­ певцов­.

4. Опре­де­ли­те­ функцию,­ прини­маю­щую­ 8 дейст­ви­тель­ных­ чисел,­ пред­ став­ляющих­ два отрез­ка­ в двумер­ном­ простран­ст­ве­. Функция­ воз­ враща­ет­ nil, если­ отрез­ки­ не пере­се­ка­ют­ся,­ в против­ном­ случае­ воз­ враща­ют­ся­ два значе­ния:­ x- и y-коор­ди­на­ты­ точки­ их пере­се­че­ния­.

Пусть функция­ f имеет­ один дейст­ви­тель­ный­ аргу­мент,­ а min и max – нену­ле­вые­ дейст­ви­тель­ные­ числа­ разных­ знаков;­ f имеет­ корень­ (воз­ враща­ет­ ноль) для неко­то­ро­го­ числа­ i, тако­го­ что min < i < max. Опре­де­­ лите­ функцию,­ прини­маю­щую­ четы­ре­ аргу­мен­та­ f, min, max и epsilon

и возвра­щаю­щую­ прибли­жен­ное­ значе­ние­ i с точно­стью­ до epsilon.

5.Метод­ Горне­ра­ позво­ля­ет­ эффек­тив­но­ решать­ поли­но­мы­. Чтобы­ найти­ ax3+bx2+cx+d, нужно­ вычис­лить­ x(x(ax+b)+c)+d. Опре­де­ли­те­ функцию,­ прини­маю­щую­ один или несколь­ко­ аргу­мен­тов ­– значе­­ ние x и следую­щие­ за ним n дейст­ви­тель­ных­ чисел,­ представ­ляю­­ щих поли­ном­ степе­ни­ (n–1). Функция­ долж­на вычис­лять­ значе­ние­ поли­но­ма­ для задан­но­го­ x мето­дом­ Горне­ра­.

6.Сколько­ бит исполь­зо­ва­ла­ бы ваша­ реали­за­ция­ для представ­ле­ния­ fixnum?

7.Сколько­ различ­ных­ типов­ чисел­ с плаваю­щей­ запя­той­ представ­ле­но­ в вашей­ реали­за­ции?­

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]