Index: src/pathops/SkPathOpsLine.cpp |
=================================================================== |
--- src/pathops/SkPathOpsLine.cpp (revision 0) |
+++ src/pathops/SkPathOpsLine.cpp (revision 0) |
@@ -0,0 +1,48 @@ |
+/* |
+ * Copyright 2012 Google Inc. |
+ * |
+ * Use of this source code is governed by a BSD-style license that can be |
+ * found in the LICENSE file. |
+ */ |
+#include "SkPathOpsLine.h" |
+ |
+SkDLine SkDLine::subDivide(double t1, double t2) const { |
+ SkDVector delta = tangent(); |
+ SkDLine dst = {{{ |
+ fPts[0].fX - t1 * delta.fX, fPts[0].fY - t1 * delta.fY}, { |
+ fPts[0].fX - t2 * delta.fX, fPts[0].fY - t2 * delta.fY}}}; |
+ return dst; |
+} |
+ |
+// may have this below somewhere else already: |
+// copying here because I thought it was clever |
+ |
+// Copyright 2001, softSurfer (www.softsurfer.com) |
+// This code may be freely used and modified for any purpose |
+// providing that this copyright notice is included with it. |
+// SoftSurfer makes no warranty for this code, and cannot be held |
+// liable for any real or imagined damage resulting from its use. |
+// Users of this code must verify correctness for their application. |
+ |
+// Assume that a class is already given for the object: |
+// Point with coordinates {float x, y;} |
+//=================================================================== |
+ |
+// isLeft(): tests if a point is Left|On|Right of an infinite line. |
+// Input: three points P0, P1, and P2 |
+// Return: >0 for P2 left of the line through P0 and P1 |
+// =0 for P2 on the line |
+// <0 for P2 right of the line |
+// See: the January 2001 Algorithm on Area of Triangles |
+// return (float) ((P1.x - P0.x)*(P2.y - P0.y) - (P2.x - P0.x)*(P1.y - P0.y)); |
+double SkDLine::isLeft(const SkDPoint& pt) const { |
+ SkDVector p0 = fPts[1] - fPts[0]; |
+ SkDVector p2 = pt - fPts[0]; |
+ return p0.cross(p2); |
+} |
+ |
+SkDPoint SkDLine::xyAtT(double t) const { |
+ double one_t = 1 - t; |
+ SkDPoint result = { one_t * fPts[0].fX + t * fPts[1].fX, one_t * fPts[0].fY + t * fPts[1].fY }; |
+ return result; |
+} |