package com.junerking.particle; public final class CGPointUtil { /** * Multiply point by floating, write result in the same point. * * @param v * - src/dst point * @param s * - factor value */ public static void mult(CGPoint v, float s) { v.x *= s; v.y *= s; } /** * Multiply point by floating, write result in another point. * * @param v * - src point * @param s * - factor value * @param res * - dst point */ public static void mult(CGPoint v, float s, CGPoint res) { res.x = v.x * s; res.y = v.y * s; } public static void applyAffineTransform(CGPoint p, CGAffineTransform t, CGPoint res) { applyAffineTransform(p.x, p.y, t, res); } public static void applyAffineTransform(float x, float y, CGAffineTransform t, CGPoint res) { res.x = (float) (x * t.m00 + y * t.m01 + t.m02); res.y = (float) (x * t.m10 + y * t.m11 + t.m12); } public static void zero(CGPoint p) { p.x = 0; p.y = 0; } public static void normalize(CGPoint src, CGPoint dst) { float invLen = 1 / CGPoint.ccpLength(src); dst.set(src.x * invLen, src.y * invLen); } public static void add(CGPoint first, CGPoint second, CGPoint ret) { ret.x = first.x + second.x; ret.y = first.y + second.y; } public static void add(CGPoint v, CGPoint toAdd) { v.x += toAdd.x; v.y += toAdd.y; } public static void sub(CGPoint first, CGPoint second, CGPoint ret) { ret.x = first.x - second.x; ret.y = first.y - second.y; } public static void sub(CGPoint v, CGPoint toAdd) { v.x -= toAdd.x; v.y -= toAdd.y; } public static float distance(CGPoint p1, CGPoint p2) { float dx = p2.x - p1.x; float dy = p2.y - p1.y; return (float) Math.sqrt(dx * dx + dy * dy); } public static void rotateByAngle(CGPoint v, CGPoint pivot, float angle, CGPoint ret) { CGPointUtil.sub(v, pivot, ret); float t = ret.x; float cosa = (float) Math.cos(angle); float sina = (float) Math.sin(angle); ret.x = t * cosa - ret.y * sina; ret.y = t * sina + ret.y * cosa; CGPointUtil.add(ret, pivot); } }