| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "config.h" | 5 #include "config.h" |
| 6 | 6 |
| 7 #include "CCMathUtil.h" | 7 #include "CCMathUtil.h" |
| 8 | 8 |
| 9 #include "FloatPoint.h" | 9 #include "FloatPoint.h" |
| 10 #include "FloatQuad.h" | 10 #include "FloatQuad.h" |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 59 // p = (1-t) h1 + (t) h2 | 59 // p = (1-t) h1 + (t) h2 |
| 60 // | 60 // |
| 61 // We want to compute point p such that p.w == epsilon, where epsilon is a s
mall | 61 // We want to compute point p such that p.w == epsilon, where epsilon is a s
mall |
| 62 // non-zero number. (but the smaller the number is, the higher the risk of o
verflow) | 62 // non-zero number. (but the smaller the number is, the higher the risk of o
verflow) |
| 63 // To do this, we solve for t in the following equation: | 63 // To do this, we solve for t in the following equation: |
| 64 // p.w = epsilon = (1-t) * h1.w + (t) * h2.w | 64 // p.w = epsilon = (1-t) * h1.w + (t) * h2.w |
| 65 // | 65 // |
| 66 // Once paramter t is known, the rest of p can be computed via p = (1-t) h1
+ (t) h2. | 66 // Once paramter t is known, the rest of p can be computed via p = (1-t) h1
+ (t) h2. |
| 67 | 67 |
| 68 // Technically this is a special case of the following assertion, but its a
good idea to keep it an explicit sanity check here. | 68 // Technically this is a special case of the following assertion, but its a
good idea to keep it an explicit sanity check here. |
| 69 ASSERT(h2.w != h1.w); | 69 DCHECK(h2.w != h1.w); |
| 70 // Exactly one of h1 or h2 (but not both) must be on the negative side of th
e w plane when this is called. | 70 // Exactly one of h1 or h2 (but not both) must be on the negative side of th
e w plane when this is called. |
| 71 ASSERT(h1.shouldBeClipped() ^ h2.shouldBeClipped()); | 71 DCHECK(h1.shouldBeClipped() ^ h2.shouldBeClipped()); |
| 72 | 72 |
| 73 double w = 0.00001; // or any positive non-zero small epsilon | 73 double w = 0.00001; // or any positive non-zero small epsilon |
| 74 | 74 |
| 75 double t = (w - h1.w) / (h2.w - h1.w); | 75 double t = (w - h1.w) / (h2.w - h1.w); |
| 76 | 76 |
| 77 double x = (1-t) * h1.x + t * h2.x; | 77 double x = (1-t) * h1.x + t * h2.x; |
| 78 double y = (1-t) * h1.y + t * h2.y; | 78 double y = (1-t) * h1.y + t * h2.y; |
| 79 double z = (1-t) * h1.z + t * h2.z; | 79 double z = (1-t) * h1.z + t * h2.z; |
| 80 | 80 |
| 81 return HomogeneousCoordinate(x, y, z, w); | 81 return HomogeneousCoordinate(x, y, z, w); |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 158 | 158 |
| 159 if (h3.shouldBeClipped() ^ h4.shouldBeClipped()) | 159 if (h3.shouldBeClipped() ^ h4.shouldBeClipped()) |
| 160 addVertexToClippedQuad(computeClippedPointForEdge(h3, h4).cartesianPoint
2d(), clippedQuad, numVerticesInClippedQuad); | 160 addVertexToClippedQuad(computeClippedPointForEdge(h3, h4).cartesianPoint
2d(), clippedQuad, numVerticesInClippedQuad); |
| 161 | 161 |
| 162 if (!h4.shouldBeClipped()) | 162 if (!h4.shouldBeClipped()) |
| 163 addVertexToClippedQuad(h4.cartesianPoint2d(), clippedQuad, numVerticesIn
ClippedQuad); | 163 addVertexToClippedQuad(h4.cartesianPoint2d(), clippedQuad, numVerticesIn
ClippedQuad); |
| 164 | 164 |
| 165 if (h4.shouldBeClipped() ^ h1.shouldBeClipped()) | 165 if (h4.shouldBeClipped() ^ h1.shouldBeClipped()) |
| 166 addVertexToClippedQuad(computeClippedPointForEdge(h4, h1).cartesianPoint
2d(), clippedQuad, numVerticesInClippedQuad); | 166 addVertexToClippedQuad(computeClippedPointForEdge(h4, h1).cartesianPoint
2d(), clippedQuad, numVerticesInClippedQuad); |
| 167 | 167 |
| 168 ASSERT(numVerticesInClippedQuad <= 8); | 168 DCHECK(numVerticesInClippedQuad <= 8); |
| 169 } | 169 } |
| 170 | 170 |
| 171 FloatRect CCMathUtil::computeEnclosingRectOfVertices(FloatPoint vertices[], int
numVertices) | 171 FloatRect CCMathUtil::computeEnclosingRectOfVertices(FloatPoint vertices[], int
numVertices) |
| 172 { | 172 { |
| 173 if (numVertices < 2) | 173 if (numVertices < 2) |
| 174 return FloatRect(); | 174 return FloatRect(); |
| 175 | 175 |
| 176 float xmin = std::numeric_limits<float>::max(); | 176 float xmin = std::numeric_limits<float>::max(); |
| 177 float xmax = -std::numeric_limits<float>::max(); | 177 float xmax = -std::numeric_limits<float>::max(); |
| 178 float ymin = std::numeric_limits<float>::max(); | 178 float ymin = std::numeric_limits<float>::max(); |
| (...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 370 } | 370 } |
| 371 | 371 |
| 372 FloatSize CCMathUtil::projectVector(const FloatSize& source, const FloatSize& de
stination) | 372 FloatSize CCMathUtil::projectVector(const FloatSize& source, const FloatSize& de
stination) |
| 373 { | 373 { |
| 374 float sourceDotDestination = source.width() * destination.width() + source.h
eight() * destination.height(); | 374 float sourceDotDestination = source.width() * destination.width() + source.h
eight() * destination.height(); |
| 375 float projectedLength = sourceDotDestination / destination.diagonalLengthSqu
ared(); | 375 float projectedLength = sourceDotDestination / destination.diagonalLengthSqu
ared(); |
| 376 return FloatSize(projectedLength * destination.width(), projectedLength * de
stination.height()); | 376 return FloatSize(projectedLength * destination.width(), projectedLength * de
stination.height()); |
| 377 } | 377 } |
| 378 | 378 |
| 379 } // namespace cc | 379 } // namespace cc |
| OLD | NEW |