Point in Triangle | Algorithm Notes



Point in Triangle | Algorithm Notes

Given a triangle by its vertices' coordinations , and . You are asked that if any point is in the triangle.

+

There are serveral solutions to this problem. Most of them will make use of cross product operator of two vector.

+

Assume we have two vectors and , the cross product of them is:

+

+

Where is the angle between those two vectors and is a vector in a third dimention that is perpendicular to both and . If we use Cartesian coordinate to prepresent the two vectors as and , we can get

+

+

Based on this, we can give some solutions to this problem.

+

Use areas of triangles

This is a straightforward solution. If is in , then we must have the sum of areas of , and is the same of the area of . Otherwise the sum will be greater than that of .

+

To calculate the area of a triangle , we can use cross product as

+

+

Use vector space

We know if form a triangle, at most two points of the three are on a line. So we can uses and to form a vector space where can be represented as:

+

+

We caluclate the dot products of the equation above with and and get

+

+

And from this we can induct:

+

+

Then if and and , is in , otherwise it is out of it.

+

Use vector relationships

The third and the best solution is making use of the relative position of and the all of three side of the triangle. We know, if is at the clockwise side of , the cross product of will be negative, or if it is at counterclockwise, the cross product is positive.

+

So we can uses cross product to decide if is at the same side of , and . In other words, if we let:

+

+

We can decide if is in by checking if is both positive or negative. If so, it is in the triangle. Especially, if one of is zero, then is on one side of .


Read full article from Point in Triangle | Algorithm Notes


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts