This book surveys computer algorithms and programming techniques for specifying and generating motion
for graphical objects, that is, computer animation. It is primarily concerned with three-dimensional (3D)
computer animation. The main audience is advanced undergraduate or beginning graduate students in
Computer Science. Computer graphics programmers who want to learn the basics of computer animation
programming and artists who use software packages to generate computer animation (digital animators)
who want to better understand the underlying computational issues of animation software will also benefit
from this book.
Cryptography is now ubiquitous – moving beyond the traditional environments, such as government communications and banking systems, we see cryptographic techniques realized in Web browsers, e-mail programs, cell phones, manufacturing systems, embedded software, smart buildings, cars, and even medical implants. Today's designers need a comprehensive understanding of applied cryptography. After an introduction to cryptography and data security, the authors explain the main techniques in modern cryptography, with chapters addressing stream ciphers, the Data Encryption Standard (DES) and 3DES, the Advanced Encryption Standard (AES), block ciphers, the RSA cryptosystem, public-key cryptosystems based on the discrete logarithm problem, elliptic-curve cryptography (ECC), digital signatures, hash functions, Message Authentication Codes (MACs), and methods for key establishment, including certificates and public-key infrastructure (PKI). Throughout the book, the authors focus on communicating the essentials and keeping the mathematics to a minimum, and they move quickly from explaining the foundations to describing practical implementations, including recent topics such as lightweight ciphers for RFIDs and mobile devices, and current key-length recommendations. The authors have considerable experience teaching applied cryptography to engineering and computer science students and to professionals, and they make extensive use of examples, problems, and chapter reviews, while the book’s website offers slides, projects and links to further resources. This is a suitable textbook for graduate and advanced undergraduate courses and also for self-study by engineers.
This book presented to the readers is my second book published by John
Wiley & Sons publishing company — thanks for such a wonderful opportunity
to publish!
My fi rst Wiley book [1] issued in 2008 covers aspect - oriented programming
and its use for trustworthy software development.
First, let me explain the allegorical meaning of the picture on the front cover
of the book — a view of a rostral column , an architectural monument at the
center of St. Petersburg in Neva embankment, designed by Jean - Francois
Thomas de Thomon in 1810. When accompanying a compiler development
team from Sun around St. Petersburg in 1994, I realized and told my guests
that the rostral columns can be considered an allegory of modern compiler
architecture. The foundation ( pillar ) of the column symbolizes trustworthy
common back - end of a family of compilers for some platform (e.g., Scalable
Processor ARChitecture [SPARC ]), and the rostra relying on the column
(according to ancient tradition, the rostra should be front parts of the defeated
enemy ’ s ships) depicts compiler front - ends — FORTRAN, C, Pascal, Modula,
and so on, developed for that hardware platform.
This trustworthy compilers book is the result of many years of my professional
experience of research and commercial projects in the compiler development
fi eld. I was as fortunate as to work with great people and companies
on compiler development: in the 1970s to 1980s — with my Russian colleagues
on developing compilers for the Russian “ Elbrus ” [2] supercomputers; in the
1990s — with Sun Microsystems on developing Sun compilers; and since 2003 —
with Microsoft on its Phoenix [3] technology for compiler development. The
results of these collaborations are presented in my book.
This book is based on my PhD thesis performed at the chair for Software for Systems
on Silicon (SSS) at the RWTH-Aachen University. It documents the results of more
than 5 years of work during which I have been accompanied and supported by many
people. It is now my great pleasure to take this opportunity to thank them.
First and foremost, I would like to thank my PhD advisor Professor Rainer
Leupers for providing me with the opportunity to work in his group, and for his
important advice and constant encouragement throughout the course of my research.
He always left me a lot of freedom and contributed much to an enjoyable and
productive working atmosphere. I am also thankful to Professor Gerd Ascheid and
Professor Heinrich Meyr. Their comments often unveiled new interesting aspects
and perspectives. I want to thank all of them for the lessons they gave me on the
importance of details for the success of an engineering or scientific project. It has
been a distinct privilege for me to work with them. Also I would like to thank
Professor Sabine Glesner for her interest in my work and for her commitment as
a secondary advisor.
There are a number of people in my everyday circle of colleagues who have
enriched my professional life in various ways. I am particularly indebted to my colleagues
Oliver Wahlen, Jiangjiang Ceng, and Gunnar Braun, who worked together
with me on the Compiler Designer project. Without their contributions, their support,
and the inspiring working atmosphere, this work would have been impossible.
I am also indebted to Felix Engel for many stimulating discussions and the excellent
cooperation in the SIMD project. Life would be bleak without all the nice and funny
moments I had with my co-students during all these years. I thank all of them.
The practice of compiler construction changes continually, in part because the designs of
processors and systems change. For example, when we began to write Engineering a Compiler
(eac) in 1998, some of our colleagues questioned the wisdom of including a chapter on
instruction scheduling because out-of-order execution threatened to make scheduling largely
irrelevant. Today, as the second edition goes to press, the rise of multicore processors and the
push for more cores has made in-order execution pipelines attractive again because their smaller
footprints allow the designer to place more cores on a chip. Instruction scheduling will remain
important for the near-term future.
At the same time, the compiler construction community continues to develop new insights and
algorithms, and to rediscover older techniques that were effective but largely forgotten. Recent
research has created excitement surrounding the use of chordal graphs in register allocation
(see Section 13.5.2). That work promises to simplify some aspects of graph-coloring allocators.
Brzozowski’s algorithm is a dfa minimization technique that dates to the early 1960s but has
not been taught in compiler courses for decades (see Section 2.6.2). It provides an easy path
from an implementation of the subset construction to one that minimizes dfas. A modern course
in compiler construction might include both of these ideas.
How, then, are we to structure a curriculum in compiler construction so that it prepares students
to enter this ever changing field? We believe that the course should provide each student with
the set of base skills that they will need to build new compiler components and to modify
existing ones. Students need to understand both sweeping concepts, such as the collaboration
between the compiler, linker, loader, and operating system embodied in a linkage convention,
and minute detail, such as how the compiler writer might reduce the aggregate code space used
by the register-save code at each procedure call.
For many students an Algebra and Trigonometry course represents the first opportunity to
discover the beauty and practical power of mathematics. Thus instructors are faced with
the challenge of teaching the concepts and skills of the subject while at the same time imparting
an appreciation for its effectiveness in modeling the real world. This book aims to
help instructors meet this challenge.
In writing this Third Edition, our purpose is to further enhance the usefulness of the
book as an instructional tool for teachers and as a learning tool for students. There are several
major changes in this edition including a restructuring of each exercise set to better align
the exercises with the examples of each section. In this edition each exercise set begins with
Concepts Exercises, which encourage students to work with basic concepts and to use mathematical
vocabulary appropriately. Several chapters have been reorganized and rewritten (as
described below) to further focus the exposition on the main concepts; we have added a new
chapter on vectors in two and three dimensions. In all these changes and numerous others
(small and large) we have retained the main features that have contributed to the success of
this book
Geometry is the mathematical discipline that deals with the interrelations
of objects in the plane, in space, or even in higher dimensions. Practicing
geometry comes in very different flavors. More than any other mathematical
discipline, the field of geometry ranges from the very concrete and visual to
the very abstract and fundamental. In the one extreme, geometry deals with
very concrete objects such as points, lines, circles, and planes and studies
the interrelations between them. On the other side, geometry is a benchmark
for logical rigor, the elegance of axiom systems, and logical chains of proof.
There is a third way of thinking about geometry that stands alongside the
visual and the logic-based approaches: the algebraic treatment. Here algebraic
structures such as vectors, matrices, and equations are used to form a kind of
parallel world, in which each geometric object and relation has an algebraic
manifestation. In this parallel world, too, the considerations may be very
concrete and algorithmic or very abstract and functorial.
Although geometry is as old as mathematics itself, discrete geometry
only fully emerged in the twentieth century, and computational geometry
was only christened in the late 1970s. The terms “discrete” and
“computational” fit well together, as the geometry must be discretized in
preparation for computations. “Discrete” here means concentration on
finite sets of points, lines, triangles, and other geometric objects, and is
used to contrast with “continuous” geometry, for example, smooth surfaces.
Although the two endeavors were growing naturally on their own,
it has been the interaction between discrete and computational geometry
that has generated the most excitement, with each advance in one field
spurring an advance in the other. The interaction also draws upon two
traditions: theoretical pursuits in pure mathematics and applicationsdriven
directions often arising in computer science. The confluence has
made the topic an ideal bridge between mathematics and computer
science. It is precisely to bridge that gap that we have written this
book.
This is a textbook for an undergraduate course in axiomatic geometry. The text is
targeted at mathematics students who have completed the calculus sequence and perhaps
a first course in linear algebra, but who have not yet encountered such upper-level
mathematics courses as real analysis and abstract algebra. A course based on this book
will enrich the education of all mathematics majors and will ease their transition into
more advanced mathematics courses. The book also includes emphases that make it
especially appropriate as the textbook for a geometry course taken by future high school
mathematics teachers.
This book is based on lectures given several times at Reading University in
England at their School of Continuing Education, from about 2002.
One might wonder why I gave these lectures. I had been attending a few
lectures on diverse subjects such as Music, Latin and Greek and my wife
suggested that perhaps I should give some lectures myself. I was somewhat taken
aback by this but then realised that I did have some useful material lying around
that would make a starting point.
When I was a boy (a long time ago) I much enjoyed reading books such as
Mathematical Snapshots by Steinhaus and Mathematical Recreations and Essays
by Rouse Ball. Moreover, I had made a few models such as the minimal set of
squares that fit together to make a rectangle, some sets of Chinese Rings, and 31
coloured cubes and these items were still around. This starting point was much
enhanced by some models that my daughter Janet had made when at school. A
junior class had been instructed to make some models for an open day but had
made a mess instead. Janet (then in the sixth form) was asked to save the day.
Thus I also had available models of many regular figures including the Poinsot-
Kepler figures and the compound of five tetrahedra and that of five cubes.