This is the long due fifth article in this series. If you aren’t comfortable with vectors, you might want to take a look at the first four articles in this series before: Introduction, Vectors 101, Geometrical Representation of Vectors, Operations on Vectors.
This cheat sheet will list several common geometrical problems found in games, and how to solve them with vector math.
Complete list of basic vector operations
But first, a little review.
For this, I assume that you have a vector class readily available. This is mostly 2D-focused, but everything works the same for 3D, except for differences concerning vector product, which I will assume to return just a scalar in the 2D case, representing the “z” axis. Any case that only applies to 2D or 3D will be pointed out.
Strictly speaking, a point is not a vector – but a vector can be used to represent the distance from the origin (0, 0) to the point, and so, it is perfectly reasonable to just use vectors to represent positions as if they were points.
I expect the class to give you access to each of the components, and to the following operations (using C++ style notation, including operator overloading – but it should be easy to translate to any other language of your choice). If a given operation is not available, you can still do it manually, either by extending the class or creating a “VectorUtils” class. The examples below are usually for 2D vectors – but 3D is usually simply a matter of adding the z coordinate following the pattern of x and y.
- Vector2f operator+(Vector2f vec): Returns the sum of the two vectors. (In a language without operator overloading, this will probably be called add(). Similarly for the next few ones.)
a + b = Vector2f(a.x + b.x, a.y + b.y); - Vector2f operator-(Vector2f vec):Â Returns the difference between the two vectors.
a – b = Vector2f(a.x – b.x, a.y – b.y); - Vector2f operator*(Vector2f vec):Â Returns the component-wise multiplication of the vectors.
a * b = Vector2f(a.x * b.x, a.y * b.y); - Vector2f operator/(Vector2f vec):Â Returns the component-wise division of the vectors.
a / b = Vector2f(a.x / b.x, a.y / b.y); - Vector2f operator*(float scalar): Returns the vector with all components multiplied by the scalar parameter.
a * s = Vector2f(a.x * s, a.y * s);
s * a = Vector2f(a.x * s, a.y * s); - Vector2f operator/(float scalar): Returns the vector with all components divided by the scalar parameter.
a / s = Vector2f(a.x / s, a.y / s); - float dot(Vector2f vec): Returns the dot product between the two vectors.
a.dot(b) = a.x * b.x + a.y * b.y; - float cross(Vector2f vec): (2D case) Returns the z component of the cross product of the two vectors augmented to 3D.
a.cross(b) = a.x * b.y – a.y * b.x; - Vector3f cross(Vector3f vec): (3D case) Returns the cross product of the two vectors.
a.cross(b) = Vector3f(a.y * b.z – a.z * b.y, a.z*b.x – a.x*b.z, a.x*b.y – a.y*b.x); - float length(): Returns the length of the vector.
a.length() = sqrt(a.x * a.x + a.y * a.y); - float squaredLength(): Returns the square of the length of the vector. Useful when you just want to compare two vectors to see which is longest, as this avoids computing square roots
a.squaredLength() = a.x * a.x + a.y * a.y; - float unit(): Returns a vector pointing on the same direction, but with a length of 1.
a.unit() = a / a.length(); - Vector2f turnLeft(): Returns the vector rotated 90 degrees left. Useful for computing normals. (Assumes that y axis points up, otherwise this is turnRight)
a.turnLeft = Vector2f(-a.y, a.x);Â - Vector2f turnRight():Â Returns the vector rotated 90 degrees right. Useful for computing normals. (Assumes that y axis points up, otherwise this is turnLeft)
a.turnRight = Vector2f(a.y, -a.x); - Vector2f rotate(float angle): Rotates the vector by the specified angle. This is an extremely useful operation, though it is rarely found in Vector classes. Equivalent to multiplying by the 2×2 rotation matrix.
a.rotate(angle) =  Vector2f(a.x * cos(angle) – a.y * sin(angle), a.x * sin(angle) + a.y * cos(angle)); - float angle(): Returns the angle that the vector points to.
a.angle() = atan2(a.y, a.x);
Simple cases – warming up
Case #01 – Distance between two points
You probably know that this is done with the Pythagorean theorem, but the vectorial way is simpler. Given two vectors a and b:
float distance = (a-b).length();
Case #02 – Alignment
Sometimes, you want to align an image by its center. Sometimes, by its top-left corner. Or sometimes, by its top-center point. More generally, you can do alignment using a vector whose two components go from 0 to 1 (or even beyond, if you’d like), giving you full control of alignment.
// imgPos, imgSize and align are all Vector2f Vector2f drawPosition = imgPos + imgSize * align
Case #03 – Parametric Line Equation
Two points define a line, but it can be tricky to do much with this definition. A better way to work with a line is its parametric equation: one point (“P0″) and a direction vector (“dir”).
Vector2f p0 = point1; Vector2f dir = (point2 - point1).unit();
With this, you can, for example, get a point 10 units away by simply doing:
Vector2f p1 = p0 + dir * 10;
Case #04 – Midpoint and interpolation between points
Say you have vectors p0 and p1. The midpoint between them is simply (p0+p1)/2. More generally, the line segment defined by p0 and p1Â can be generated by varying t between 0 and 1 in the following linear interpolation:
Vector2f p = (1-t) * p0 + t * p1;
At t = 0, you get p0; at t = 1, you get p1; at t = 0.5, you get the midpoint, etc.
Case #05 – Finding the normal of a line segment
You already know how to find the direction vector of a line segment (case #03). The normal vector is a 90 degree rotation of that, so just call turnLeft() or turnRight() on it!
Projections using the Dot Product
The dot product has the incredibly useful property of being able to compute the length of a vector’s projection along the axis of another. To do this, you need the vector that you’ll project (“a“) and a unit vector (so make sure that you call unit() on it first!) representing the direction (“dir“). The length is then simply a.dot(dir). For example, if you have a = (3, 4) and dir = (1, 0), then a.dot(dir) = 3, and you can tell that this is correct, because (1, 0) is the direction vector of the x axis. In fact, a.x is always equivalent to a.dot(Vector2f(1, 0)), and a.y is equivalent to a.dot(Vector2f(0, 1)).
Because the dot product between a and b is also defined as |a||b|cos(alpha) (where alpha is the angle between the two), the result will be 0 if the two vectors are perpendicular, positive if the angle between them is less than 90, and negative if greater. This can be used to tell if two vectors point in the same general direction.
If you multiply the result of that dot product by the direction vector itself, you get the vector projected along that axis – let’s call that “at” (t for tangent). If you now do a – at, you get the part of the vector that is perpendicular to the dir vector – let’s call that “an” (n for normal). at + an = a.
Case #06 – Determining direction closest to dir
Say that you have a list of directions represented as unit vectors, and you want to find which of them is the closest to dir. Simply find the largest dot product between dir and a vector in the list. Likewise, the smallest dot product will be the direction farthest away.
Case #07 – Determining if the angle between two vectors is less than alpha
Using the equation above, we know that the angle between two vectors a and b will be less than alpha if the dot product between their unit vectors is less than cosine of alpha.
bool isLessThanAlpha(Vector2f a, Vector2f b, float alpha) { return a.unit().dot(b.unit()) < cos(alpha); }
Case #08 – Determining which side of a half-plane a point is on
Say that you have an arbitrary point in space, p0, and a direction (unit) vector, dir. Imagine that an infinite line goes by p0, perpendicular to dir, dividing the plane in two, the half-plane that dir points to, and the half-plane that it does not point to. How do I tell whether a point p is in the side pointed to by dir? Remember that dot product is positive when the angle between vectors is less than 90 degrees, so just project and check against that:
bool isInsideHalfPlane(Vector2f p, Vector2f p0, Vector dir) { return (p - p0).dot(dir) >= 0; }
Case #09 – Forcing a point to be inside a half-plane
Similar to the case above, but instead of just checking, we’ll grab the projection and, if less than 0, use it to move the object -projection along dir, so it’s on the edge of the half-plane.
Vector2f makeInsideHalfPlane(Vector2f p, Vector2f p0, Vector dir) { float proj = (p - p0).dot(dir); if (proj >= 0)Â return p; else return p - proj * dir; }
Case #10 – Checking/forcing a point inside a convex polygon
A convex polygon can be defined to be the intersection of several half-planes, one for each edge of the polygon. Their p0 is either vertex of the edge, and their dir is the edge’s inner-facing normal vector (e.g., if you wind clockwise, that’d be the turnRight() normal). A point is inside the polygon if and only if it’s inside all the half-planes. Likewise, you can force it to be inside the polygon (by moving to the closest edge) by applying the makeInsideHalfPlane algorithm with every half-plane. [ops, this actually only works if all angles are >= 90 degrees]
Case #11 – Reflecting a vector with a given normal
Pong-like game. Ball hits a sloped wall. You know the ball’s velocity vector and the wall’s normal vector (see case #05). How do you reflect it realistically? Simple! Just reflect the ball’s normal velocity, and preserve its tangential velocity.
Vector2f vel = getVel(); Vector2f dir = getWallNormal(); // Make sure this is a unit vector Vector2f velN = dir * vel.dot(dir); // Normal component Vector2f velT = vel - velN; // Tangential component Vector2f reflectedVel = velT - velN;
For more realism, you can multiply velT and velN by constants representing friction and restitution, respectively.
Case #12 – Cancelling movement along an axis
Sometimes, you want to restrict movement in a given axis. The idea is the same as above: decompose in a normal and tangential speed, and just keep tangential speed. This can be useful, for example, if the character is following a rail.
Rotations
Case #13 – Rotating a point around a pivot
If used to represent a point in space, the rotate() method will rotate that point around the origin. That might be interesting, but is limiting. Rotating around an arbitrary pivot vector is simple and much more useful – simply subtract the pivot from it, as if translating so the origin IS the pivot, then rotate, then add the pivot back:
Vector2f rotateAroundPivot(Vector2f p, Vector2f pivot) { return (pos - pivot).rotate(angle) + pivot; }
Case #14 – Determining which direction to turn towards
Say that you have a character that wants to rotate to face an enemy. He knows his direction, and the direction that he should be facing to be looking straight at the enemy. But should he turn left or right? The cross product provides a simple answer: curDir.cross(targetDir) will return positive if you should turn left, and negative if you should turn right (and 0 if you’re either facing it already, or 180 degrees from it).
Other Geometric Cases
Here are a few other useful cases that aren’t that heavily vector-based, but useful:
Case #15 – Isometric world to screen coordinates
Isometric game. You know where the (0, 0) of world is on the screen (let’s call that point origin and represent it with a vector), but how do you know where a given world (x, y) is on the screen? First, you need two vectors determining the coordinate base, a new x and y axes. For a typical isometric game, they can be bx = Vector2f(2, 1)Â and by = Vector2f(-2, 1)Â – They don’t necessarily have to be unit vectors. From now, it’s straightforward:
Vector2f p = getWorldPoint(); Vector2f screenPos = bx * p.x + by * p.y + origin;
Yes, it’s that simple.
Case #16 – Isometric screen to world coordinates
Same case, but now you want to know which tile the mouse is over. This is more complicated. Since we know that (x’, y’) = (x * bx.x + y * by.x, x * bx.y + y * by.y) + origin, we can first subtract origin, and then solve the linear equation. Using Cramer’s Rule, except that we’ll be a little clever and use our 2D cross-product (see definition at the beginning of the article) to simplify things:
Vector2f pos = getMousePos() - origin; float demDet = bx.cross(by); float xDet = pos.cross(by); float yDet = bx.cross(pos); Vector2f worldPos = Vector2f(xDet / demDet, yDet / demDet);
And now you don’t need to do that ugly find-rectangle-then-lookup-on-bitmap trick that I’ve seen done several times before.
Rachellegef
/ 2016-08-16гороÑкоп ÑовмеÑтимоÑти мужчина рак женщина лев – 8 знак по гороÑкопу гороÑкоп ежедневный
Marvinvus
/ 2016-08-16ЕÑли он чаÑто упоминаетее Ð¸Ð¼Ñ Ð²Ð¾ Ñне или же, оговорившиÑÑŒ, называет Ð²Ð°Ñ ÐµÐµ .. Влюбленные хотÑÑ‚ видеть Ñ€Ñдом Ñ Ñобойчеловека, любовь которого Ñтоль же .. о пышной икраÑивой Ñвадьбе не Ñтоит, даже еÑли вам замуж невтерпеж. .. Помните, что, начав ухаживать за Ñвоим мужчиной как за мужем ,
Audreapracy
/ 2016-08-16ПерÑональный гороÑкоп Ð’Ð¾Ð´Ð¾Ð»ÐµÑ Ñможет указать облаÑти, в которых данного предÑтавителÑ
Nicholeham
/ 2016-08-16как ÑнÑÑ‚ÑŒ порчу ÑамоÑтоÑтельно беÑплатно дома. ГÐДÐÐИЕ ОÐЛÐЙÐ
Jamikagom
/ 2016-08-16Что заÑтавлÑло ÐÐ²ÐµÐ»Ñ Ð´ÐµÐ»Ð°Ñ‚ÑŒ Ñвои предÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ ? Ведь именно он указал точную дату Ñмерти Екатерины II — 6 ноÑÐ±Ñ€Ñ 1796 года в 9
Lindyflake
/ 2016-08-16Поема «Сон » ТараÑа Шевченка – викривальна поема , де гоÑтро виÑміÑні потворні, антинародні
DanielleMr
/ 2016-08-16ÐÑƒÐ¼ÐµÑ€Ð¾Ð»Ð¾Ð³Ð¸Ñ · ЧиÑло Судьбы · ЧиÑло Пути · РаÑчет ЧиÑла РаÑÑчитать ÑовмеÑтимоÑÑ‚ÑŒ . Дата : 3-е Ð¸ÑŽÐ½Ñ 2014 года ВремÑ: 1:26 (UTC +4) Ритм индивидуального лунного меÑÑца поÑтоÑнен от Ñ€Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ñ‡ÐµÐ»Ð¾Ð²ÐµÐºÐ° и до его Ñмерти .
Ramonamib
/ 2016-08-16Развить Ñвои ÑпоÑобноÑти может любой! Ð’ МоÑкве еÑÑ‚ÑŒ даже Школы, которые на Ñтом ÑпециализируютÑÑ. Книг также полно, поÑмотрите того же Блаво
Daphnelot
/ 2016-08-163 ричеркара. Фортепианный концерт â„–4 " Ð—Ð°ÐºÐ»Ð¸Ð½Ð°Ð½Ð¸Ñ " – 9 ÐоÑÐ±Ñ€Ñ 2010 – Погружение в клаÑÑику. Ðачинающим ÑлушателÑм · Форум 100 лет BPO / 100 Jahre Berliner Philharmonisches Orchester [ видео –
JannetBora
/ 2016-08-16Ðктивный Ñнварь Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñми, поездками будет богат на новые ÑвÑзи и
JulianGarl
/ 2016-08-16СекÑÑƒÐ°Ð»ÑŒÐ½Ð°Ñ Ð½ÑƒÐ¼ÐµÑ€Ð¾Ð»Ð¾Ð³Ð¸Ñ – внимание на работу и близких, либо будете очень чаÑто менÑÑ‚ÑŒ Ñвоих партнеров в поиÑках новых ощущений в поÑтели. 1 .
EdnaCandy
/ 2016-08-16ÐаÑколько правдивы виртуальные гаданиÑ, Ð½ÑƒÐ¼ÐµÑ€Ð¾Ð»Ð¾Ð³Ð¸Ñ Ð¸Ð»Ð¸ гороÑкопна ÑегоднÑ, ГороÑкоп
Ingerpoili
/ 2016-08-16Гадание по пламени Ñвоими корнÑми уходит далекое прошлое , когда Ðо еÑли карта говорит о «Ñвоем», то Ñто указывает на ошибку в раÑкладе.
DenyseJidS
/ 2016-08-16гадание по руке количеÑтво браков – > · гадание по руке левша – > · гадание по руке научитьÑÑ – > · гадание по руке научитьÑÑ – > · гадание
Corafoody
/ 2016-08-16Чтобы узнать, что хотÑÑ‚ Ñказать вам Ð³Ð°Ð´Ð°Ð½Ð¸Ñ Ñтаринный паÑÑŒÑÐ½Ñ Ð¾Ð½Ð»Ð°Ð¹Ð½
ClarindaGoW
/ 2016-08-16гадание на вÑтречу камни по зодиаку наина владимирова Ð³Ð°Ð´Ð°Ð½Ð¸Ñ Ñколько знаков
KatiEarneks
/ 2016-08-16ХИРОМÐÐТИЯ — (от греч. cheir рука и manteia гадание ) гадание по линиÑм и бугоркам ладони
JaimeclEX
/ 2016-08-16ЧиÑло 16 ÑчитаетÑÑ Ð¾Ñобым, миÑтичеÑким чиÑлом. Оно может принеÑти
Lisitstymn
/ 2016-08-16ГороÑкоп ÑовмеÑтимоÑÑ‚ÑŒ знаков лев и рак гороÑкопи ÑовмеÑтимоÑти мужчина близнецы
Rettaexcalp
/ 2016-08-16мужчина ГороÑкоп 2014 года ГороÑкоп Стрелец на 2014 год, Здоровье. У
MoiraAdminy
/ 2016-08-16Видеть ÐпельÑин во Ñне . / (Любовный Ñонник). ЕÑли вам приÑнилоÑÑŒ, что вы едите апельÑин , значит вам не избежать разлуки и даже разрыва
DanielKiz
/ 2016-08-16http://helpextra.ru/praktika Ритуалы в полнолуние – Ñто Ñамые благоприÑтные дни Ð´Ð»Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ
SamuelThap
/ 2016-08-16Как раÑÑчитать дату Ñмерти Ð½ÑƒÐ¼ÐµÑ€Ð¾Ð»Ð¾Ð³Ð¸Ñ . ВернутьÑÑ Ðº началу. Профиль. 05.06.2013, 12:43. elena-ruko. ÐдминиÑтратор. Ðватара
SinaOffeshy
/ 2016-08-16Вот одно из ПоÑледних ПредÑказаний Ванги : РоÑÑÐ¸Ñ .. Будущее РоÑÑии Ванге предÑтавлÑлоÑÑŒ Ñледующим: "Ð’Ñе будет таÑÑ‚ÑŒ, Ñ Ð¿Ñ€ÐµÐ´ÑказаниÑми ÐоÑтрадамуÑа , и других пророков и провидцев ÑвитьÑÑ Ð² РоÑÑию.
Brendasenia
/ 2016-08-16Интернет-газета " Джентри " ВыпуÑки 2014 года · ВыпуÑки 2013 года ·
FabiolaDiar
/ 2016-08-16Гадаю на Таро беÑплатно .. 1111 Ð´Ð»Ñ Ñтого раÑклада дата Ñ€Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð½Ðµ обÑзательна, Ð¸Ð¼Ñ Ð¶ÐµÐ»Ð°Ñ‚ÐµÐ»ÑŒÐ½Ð¾. (1) · Сон – поймала Ñвадебный букет (7) · Как ужитьÑÑ Ñо Львом? (46) · Гадание на игральных картах (16)
Ardellmege
/ 2016-08-16У рыцарей Ñмерти даже еÑÑ‚ÑŒ Ñвой ÑобÑтвенный Конь Ñмерти ÐкеруÑа! .. облегчить жизнь хилам, а при танке находÑщимÑÑ Ð¿Ñ€Ð¸ Ñмерти, благодарÑ
LelaLENDAGO
/ 2016-08-16Рвот ÐлекÑандр Ð¨ÐµÐ¿Ñ Ð±Ñ‹Ð» не рад необходимоÑти делать такой прогноз. Он Ñчитает, что, Ð·Ð°Ð´Ð°Ð²Ð°Ñ Ð²Ð¾Ð¿Ñ€Ð¾ÑÑ‹ о будущем, человек должен
QuyenRite
/ 2016-08-16EÑли Ð’aм понравилоÑÑŒ онлайн гадание на Ð¿Ð°Ñ€Ð½Ñ , обÑзательно иÑпытайте на Ñебe другиe гаданиÑ, предÑтавленныe на нашeм Ñайте:
AntoniaSa
/ 2016-08-16ТеÑÑ‚ на ÑовмеÑтимоÑÑ‚ÑŒ по дате рождениÑ. Ðтого не Ñкрою.донечка.Я Ñтолько нежноÑти хочу тебе еще теÑÑ‚, дыханье,Ñ‚Ñ‹ не ÑможешьМне в Ñтой прихоти
Shannaper
/ 2016-08-16Ð³Ð°Ð´Ð°Ð½Ð¸Ñ Ð½Ð° Ð¿Ð°Ñ€Ð½Ñ Ð¾Ð½Ð»Ð°Ð¹Ð½ беÑплатно | гадание на замужеÑтво онлайн . Могла его видеть и
YuetteKaf
/ 2016-08-16Приворот в кемерово, приворот любимого, приворот на любовь , заговоры, гаданиÑ
Chassidykr
/ 2016-08-16ВладиÑлав Грам. Коуч. ÐЛП -Практик. О курÑе «Коучинг: ÐºÑƒÑ€Ñ Ñ‡ÑƒÐ´ÐµÑ Ð´Ð»Ñ . P.S. ВоÑемь меÑÑцев назад Ñ Ð²Ñ€Ñд ли наиÑал бы отзыв в такой форме :)) и длÑ
MaudeUnoge
/ 2016-08-16ГороÑкопы – мы знаем вÑе о ГороÑкопы. ÐвторÑкие гороÑкопы аÑтролога Романа Ðечаева: гороÑкоп на год, . Любимые гороÑкопы – в новом окне
Coreymica
/ 2016-08-16БеÑплатно Ñкачать игру Ядерный шар 2 на компьютер без шар желаний Ñкачать на – Шар желаний
TarraSpise
/ 2016-08-16так как мимика и жеÑÑ‚Ñ‹ чаще вÑего непроизвольны а потому правдивы Таким о. Ðазвание: Ð¥Ð¸Ñ€Ð¾Ð¼Ð°Ð½Ñ‚Ð¸Ñ . РаÑшифровка кода человека по его руке
Eloisanob
/ 2016-08-16Фишкина Картинка. Тема: ПредÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð’Ð°Ð½Ð³Ð¸ (2 фото) Ð”Ð»Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñти комментировать новоÑти
NakitaSuise
/ 2016-08-16Игумен n Об одном древнем Ñтрахе Кого и как «портÑт» колдуны По благоÑловению СвÑтейшего
Vestasmasy
/ 2016-08-17Резервы Ð·Ð´Ð¾Ñ€Ð¾Ð²ÑŒÑ Ð´Ð¾Ñтаточны. УÑпех будет там, где на Ñледующую неделю. Зодиакальный гороÑкоп на Ñледующую неделю Ñ 2 по 8 Ð¸ÑŽÐ½Ñ 2014 года.
Adriennekt
/ 2016-08-17Ðто лишь некоторые предÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ , которые Ñделала в интервью " ГолоÑу РоÑÑии начало новой Ñпохи, уже произошли в 2013 году .
Karmenoxini
/ 2016-08-17он обновлÑетÑÑ ÐµÐ¶ÐµÑуточно как минимум. Тема, Раздел, Ðвтор, Дата . BSOD (Синий Ñкран Ñмерти ) поÑле запуÑка Dr.Web CureIt BSOD ПоÑле проверки утилитой от ДрВеба выпадает BSOD, винда не грузитÑÑ.
EarnestKn
/ 2016-08-17Об Ñтом на Ñвоей Ñтранице в Ñоциальной Ñети «Facebook» Ñообщает .. ÐЛЕКСÐÐДРШЕПС : КÐК С ПОМОЩЬЮ СВЕЧЕЙ ПРИМÐÐИТЬ
Johnettem
/ 2016-08-17Любовный гороÑкоп Ñкорпион и близнецы гороÑкоп на 2010 год Ñтрелец коза хорошие гороÑкопы
Shastatob
/ 2016-08-17Приворот любимого на любимого на возврат по фотографии ÑамоÑтоÑтельно под Ñвой порог
GussieKah
/ 2016-08-17Gadanie_pasyans_onlain. Ñтаринный паÑÑŒÑÐ½Ñ Ð¾Ð½Ð»Ð°Ð¹Ð½ гадание . none Игральные карты в Ñтаринном руÑÑком
LarisaDrasp
/ 2016-08-17СовмеÑтимоÑÑ‚ÑŒ близнецы Ñтрелец по гороÑкопу беÑплатно. Ð’ паре близнецы мужчина, Ñтрелец женщина Ñто проÑвлÑетÑÑ Ð¾Ñобенно наглÑдно.
CamiTweni
/ 2016-08-17Третий глаз, откройÑÑ! Женщины не дадут Ñоврать: Ð¸Ð½Ñ‚ÑƒÐ¸Ñ†Ð¸Ñ Ñ€ÐµÐ´ÐºÐ¾ подводит, правда, еÑли мы
Nilajeolype
/ 2016-08-17Ðайдено 1 Ñообщений. CÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ñ Ð¼ÐµÑ‚ÐºÐ¾Ð¹. Ñкачать Ñонник вещи забыть – Самое интереÑное в блогах. Следующие 10 » · Следующие 10 ». <Ñкачать
Katelinkr
/ 2016-08-17Of the Vishu festival, held in celebration of the New Year in Malabar, the .. They drive in the first post, which must have a certain length, say of [ 34 – five, seven, It is recorded by Frazer12 that, when a Hindu child’s horoscope portends
GertudeText
/ 2016-08-17От Ð½ÑƒÐ»Ñ Ð²ÐµÐ´ÑƒÑ‚ Ñчет вÑе прочие чиÑла , поÑтому в нумерологии 0 Однако, в учениÑÑ… Каббалы и верованиÑÑ… индейцев Ð¼Ð°Ð¹Ñ 13 , наоборот, ÑчаÑтливое