# Geometric Duality Transformation

One topic I’ve found to be extremely interesting is the idea of dual space in terms of a polyhedron. After recently being introduced to Fourier transforms (thanks Professor Morhmann!) and image processing I’ve been thinking about dual space in the same sort of light: as a mathematical transformation. I’d like to take a moment to thank Dirk Gregorius for first introducing me to the idea of Dual space, and sharing some of his thoughts on the subject.

Transformations that map from domain to range are generally used to simplify problems. In computational geometry many problems are numerically challenging to solve in standard Euclidean space. Edge cases and code complexity rise in order to handle numerical and geometric robustness issues.

By taking a polyhedron into Dual Space a new perspective is gained and some problems may become much simpler to solve. Hopefully this short article can be of use to someone by describing a particular type of dual transformation. For this article Euclidean space is denoted by E, and dual space is denoted by D. Given a 3D point P in E, the transformation to dual space is:

P = \left\{\begin{matrix}a&b&c\end{matrix}\right\}\in E \\
D( P ) = ax + by + cz = 1
\label{eq1}

In this way a point in E becomes a plane in D. In this way the Dual plane of point P becomes farther from the origin in D the closer P is to the origin in E. The units in Dual Space are of inverse units in Euclidean space.

Similarly a plane L in E transformed to a point in D is denoted by the following:

L = ax + by + cz \in E \\
D( L ) = \left\{\begin{matrix}\frac{a}{d}&\frac{b}{d}&\frac{c}{d}\end{matrix}\right\} = 1
\label{eq2}

In this way a point in E maps to a plain in D, and the farther away from the origin the point is the closer to the origin the plane is.

This Dual transformation is interesting due to the isomorphism present. The Dual of E is indeed D, and the Dual of D returns back the original E. This allows data to be transformed to Dual space and back again, allowing algorithms to be performed within the intermediary Dual space.

This particular transformation can be see in Ericson’s Real-Time Collision Detection, as well as a white paper on the topic of CD-Dual.

One popular example of utilizing a type of dual transformation (not necessarily this exact transformation) is the open source project HACD by Khaled Mamou. In his project half-edge collapse operations are performed upon the Dual of a mesh, all the while minimizing a tunable cost function. There are more applications that may benefit from the perspective of Dual space, and I hope this article can bring this idea some more awareness.

Preview image from: http://www.math.rutgers.edu/~erowland/polyhedra-project.html

Share

# thatgamecompany Internship!

Recently inspired by my colleague Allen’s interesting blog post about his hiring experience I’ve decided to follow suit and share my own experience on acquiring an internship the year before graduation!

I’m sure most anyone reading my blog knows of a company called thatgamecompany. I have recently been offered a summer internship! The company is an amazing one and I personally feel that I belong at such a place. I’ll see how good of a fit we make in the coming months, though I remain extremely optimistic about the whole thing.

Smaller game companies seem to work like a mini-Valve in that the team structure is flat. When speaking with thatgamecompany’s lead engineer John and researching the company I was drawn towards the way that John detailed about the internals of company working. One thing that stuck out to me most was that John had mentioned that often times a developer will get an idea, experiment and try it out and see how things go. If a good idea is placed into the game other employees will recognize this and “hop on the bandwagon” to work together to get to the next iteration. John had mentioned that he feels a good fit for a team structure like this are individuals with a lot of initiative. I myself strive for an environment that embraces initiative, experimentation and professional growth.

They even sent me one of their AWESOME T-Shirts! Special thanks to a particular someone’s mom :)

So I’ve been struttin round with my snazzy shirt for weeks ever since I was made an offer. I think it would be fun to describe how I actually met John Edwards, one of the founders, in an effort to perhaps inspire others to do similar.

In my early studies at DigiPen I was hungry to find all resources that exist on the C++ topic of code reflection. thatgamecompany’s lead engineer John Edwards had made some sample material available to students at my university a few years earlier, and at the end of his material he left his email in case anyone wanted to contact him.

Happy to have found the exact reference material I needed I implemented all that was presented, and then added a whole lot more atop. After feeling great about the results I emailed John thanking him for his contribution of knowledge and linked him to one of my portfolio videos. I do this with most people that give out GDC lectures or other types of online-material, as I know from experience that seeing others’ work benefit from your own material grants a very rewarding feeling -like a sense altruism satiated.

John ended up liking my video and asked me to shoot him an email next year if I was interested in interning at thatgamecompany. At first (as a Sophomore) my mind wasn’t on internships or hiring in any way, and I was really just lucky I sent him an email at all.

The interview process was actually super long spanning a couple months. Albeit Christmas did strike through the middle of the process, it was still long. The usual is programming tests, phone interviews followed by some form of in-person meetup and additional interviews; interviewing with thatgamecompany mostly followed this format. In general (not specific to thatgamecompany) knowing 3D math to point where it feels like a language in and of itself, and proficiency in C++ seem to be pretty much the only requirements to make oneself appealing as a potential hire (as for as tech skill goes for engineers). If anyone wants tips on how to practice for interviewing my advice would be to make sure you’re proficient in your area of study. Beyond this I find that practicing writing code on a white-board helps for formal coding interviews, practicing with a mock-interviewer. For me personally the biggest practice was just repetition of mock coding interviews to keep me from being nervous. When I’m nervous my mind can go pretty blank.

Another thing thatgamecompany was very interested in learning about was how I handle myself in team situations. I actually appreciated the care they took to find out who I am and how I work with other people. So if I did have any advice that might be of help to anyone, it would be to not underestimate the value of working on a larger project with other people in order to ship a product. I feel that I’m quite lucky to have a few small school/team projects finished and released, and would advise others seeking entry level positions to do the same if possible.

Hopefully my luck will last out a little longer as I proceed towards graduation!

In this I would say the moral of the story is: people that write or put forth educational content always do so with an interest to teach others. If one is genuinely interested in the content and contacts the original authors with a thank you, they will inevitably be interested, especially if intelligent followup questions are asked. I would suppose that seeing others benefit and take interest in your efforts to help is just irresistible. It’s a great way to thank wonderful people and educate yourself at the same time. I’ve done this with dozens of various authors of all sorts of content, and every single one of them has always responded very generously; I’m very thankful to them all for their willingness to help.