/* * Copyright 2015 Laszlo Balazs-Csiki * * This file is part of Pixelitor. Pixelitor is free software: you * can redistribute it and/or modify it under the terms of the GNU * General Public License, version 3 as published by the Free * Software Foundation. * * Pixelitor is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Pixelitor. If not, see <http://www.gnu.org/licenses/>. */ package pixelitor.tools.shapes; /** * Rabbit shape based on http://commons.wikimedia.org/wiki/File:Lapin01.svg */ public class Rabbit extends GeneralShape { public Rabbit(double x, double y, double width, double height) { double cp1X; // x of control point 1 double cp1Y; // y of control point 1 double cp2X; // x of control point 2 double cp2Y; // y of control point 2 double epX; // x of end point double epY; // y of end point epX = x + 0.040013865f * width; epY = y + 1.008531f * height; path.moveTo(epX, epY); epX = x + 0.040013865f * width; epY = y + 1.008531f * height; path.lineTo(epX, epY); cp1X = x + -0.0072747176f * width; cp1Y = y + 0.98074985f * height; cp2X = x + 0.024679389f * width; cp2Y = y + 0.9498783f * height; epX = x + 0.09133304f * width; epY = y + 0.9589505f * height; path.curveTo(cp1X, cp1Y, cp2X, cp2Y, epX, epY); cp1X = x + 0.15063688f * width; cp1Y = y + 0.9670223f * height; cp2X = x + 0.15137121f * width; cp2Y = y + 0.9557281f * height; epX = x + 0.09593642f * width; epY = y + 0.88814896f * height; path.curveTo(cp1X, cp1Y, cp2X, cp2Y, epX, epY); cp1X = x + -0.01920119f * width; cp1Y = y + 0.74778765f * height; cp2X = x + 0.052076936f * width; cp2Y = y + 0.5458122f * height; epX = x + 0.25163308f * width; epY = y + 0.44696248f * height; path.curveTo(cp1X, cp1Y, cp2X, cp2Y, epX, epY); cp1X = x + 0.32225257f * width; cp1Y = y + 0.4119814f * height; cp2X = x + 0.4428571f * width; cp2Y = y + 0.3824616f * height; epX = x + 0.51700807f * width; epY = y + 0.38200802f * height; path.curveTo(cp1X, cp1Y, cp2X, cp2Y, epX, epY); cp1X = x + 0.60799533f * width; cp1Y = y + 0.38145146f * height; cp2X = x + 0.629871f * width; cp2Y = y + 0.3712599f * height; epX = x + 0.63609755f * width; epY = y + 0.32652643f * height; path.curveTo(cp1X, cp1Y, cp2X, cp2Y, epX, epY); cp1X = x + 0.6407988f * width; cp1Y = y + 0.2927493f * height; cp2X = x + 0.6346229f * width; cp2Y = y + 0.28096077f * height; epX = x + 0.60144824f * width; epY = y + 0.26038873f * height; path.curveTo(cp1X, cp1Y, cp2X, cp2Y, epX, epY); cp1X = x + 0.554136f * width; cp1Y = y + 0.23104994f * height; cp2X = x + 0.52339137f * width; cp2Y = y + 0.18531744f * height; epX = x + 0.50963587f * width; epY = y + 0.12381795f * height; path.curveTo(cp1X, cp1Y, cp2X, cp2Y, epX, epY); cp1X = x + 0.50119716f * width; cp1Y = y + 0.086089045f * height; cp2X = x + 0.50408596f * width; cp2Y = y + 0.07857119f * height; epX = x + 0.5296363f * width; epY = y + 0.07176943f * height; path.curveTo(cp1X, cp1Y, cp2X, cp2Y, epX, epY); cp1X = x + 0.5460614f * width; cp1Y = y + 0.067397006f * height; cp2X = x + 0.5728859f * width; cp2Y = y + 0.069828175f * height; epX = x + 0.58924633f * width; epY = y + 0.077172026f * height; path.curveTo(cp1X, cp1Y, cp2X, cp2Y, epX, epY); cp1X = x + 0.61466366f * width; cp1Y = y + 0.08858141f * height; cp2X = x + 0.6209563f * width; cp2Y = y + 0.08619166f * height; epX = x + 0.6324887f * width; epY = y + 0.060750637f * height; path.curveTo(cp1X, cp1Y, cp2X, cp2Y, epX, epY); cp1X = x + 0.65163946f * width; cp1Y = y + 0.018502839f * height; cp2X = x + 0.6743496f * width; cp2Y = y + 0.010755983f * height; epX = x + 0.7068129f * width; epY = y + 0.03539744f * height; path.curveTo(cp1X, cp1Y, cp2X, cp2Y, epX, epY); cp1X = x + 0.72997665f * width; cp1Y = y + 0.052980013f * height; cp2X = x + 0.7349572f * width; cp2Y = y + 0.073248066f * height; epX = x + 0.7349572f * width; epY = y + 0.14992881f * height; path.curveTo(cp1X, cp1Y, cp2X, cp2Y, epX, epY); cp1X = x + 0.7349572f * width; cp1Y = y + 0.14992881f * height; cp2X = x + 0.7243528f * width; cp2Y = y + 0.21992458f * height; epX = x + 0.7444144f * width; epY = y + 0.23675124f * height; path.curveTo(cp1X, cp1Y, cp2X, cp2Y, epX, epY); cp1X = x + 0.7595459f * width; cp1Y = y + 0.24944268f * height; cp2X = x + 0.8221204f * width; cp2Y = y + 0.25819716f * height; epX = x + 0.8221204f * width; epY = y + 0.25819716f * height; path.curveTo(cp1X, cp1Y, cp2X, cp2Y, epX, epY); cp1X = x + 0.92755914f * width; cp1Y = y + 0.2764633f * height; cp2X = x + 1.0300739f * width; cp2Y = y + 0.34662718f * height; epX = x + 1.0162245f * width; epY = y + 0.39104718f * height; path.curveTo(cp1X, cp1Y, cp2X, cp2Y, epX, epY); cp1X = x + 1.0062926f * width; cp1Y = y + 0.42290244f * height; cp2X = x + 0.96991086f * width; cp2Y = y + 0.45113784f * height; epX = x + 0.9311116f * width; epY = y + 0.45710227f * height; path.curveTo(cp1X, cp1Y, cp2X, cp2Y, epX, epY); cp1X = x + 0.9080986f * width; cp1Y = y + 0.46063998f * height; cp2X = x + 0.8888217f * width; cp2Y = y + 0.47446352f * height; epX = x + 0.8816618f * width; epY = y + 0.5235348f * height; path.curveTo(cp1X, cp1Y, cp2X, cp2Y, epX, epY); cp1X = x + 0.86651766f * width; cp1Y = y + 0.62732774f * height; cp2X = x + 0.85083693f * width; cp2Y = y + 0.6763924f * height; epX = x + 0.77440256f * width; epY = y + 0.73883635f * height; path.curveTo(cp1X, cp1Y, cp2X, cp2Y, epX, epY); cp1X = x + 0.7176915f * width; cp1Y = y + 0.7851673f * height; cp2X = x + 0.70043164f * width; cp2Y = y + 0.80839103f * height; epX = x + 0.69536436f * width; epY = y + 0.8451849f * height; path.curveTo(cp1X, cp1Y, cp2X, cp2Y, epX, epY); cp1X = x + 0.6892658f * width; cp1Y = y + 0.8894677f * height; cp2X = x + 0.69251734f * width; cp2Y = y + 0.8941835f * height; epX = x + 0.75021094f * width; epY = y + 0.9247309f * height; path.curveTo(cp1X, cp1Y, cp2X, cp2Y, epX, epY); cp1X = x + 0.75021094f * width; cp1Y = y + 0.9247309f * height; cp2X = x + 0.81154025f * width; cp2Y = y + 0.94011706f * height; epX = x + 0.81154025f * width; epY = y + 0.9572035f * height; path.curveTo(cp1X, cp1Y, cp2X, cp2Y, epX, epY); cp1X = x + 0.81154025f * width; cp1Y = y + 0.97941357f * height; cp2X = x + 0.7487237f * width; cp2Y = y + 0.99503887f * height; epX = x + 0.7487237f * width; epY = y + 0.99503887f * height; path.curveTo(cp1X, cp1Y, cp2X, cp2Y, epX, epY); cp1X = x + 0.6672635f * width; cp1Y = y + 1.0235244f * height; cp2X = x + 0.628459f * width; cp2Y = y + 1.0168356f * height; epX = x + 0.38623852f * width; epY = y + 1.0133331f * height; path.curveTo(cp1X, cp1Y, cp2X, cp2Y, epX, epY); cp1X = x + 0.24638778f * width; cp1Y = y + 1.0113109f * height; cp2X = x + 0.11868698f * width; cp2Y = y + 1.0137571f * height; epX = x + 0.10245893f * width; epY = y + 1.0187693f * height; path.curveTo(cp1X, cp1Y, cp2X, cp2Y, epX, epY); cp1X = x + 0.083660685f * width; cp1Y = y + 1.0245752f * height; cp2X = x + 0.060999904f * width; cp2Y = y + 1.0208601f * height; epX = x + 0.040013865f * width; epY = y + 1.008531f * height; path.curveTo(cp1X, cp1Y, cp2X, cp2Y, epX, epY); epX = x + 0.6187177f * width; epY = y + 0.9237426f * height; path.moveTo(epX, epY); epX = x + 0.6187177f * width; epY = y + 0.9237426f * height; path.lineTo(epX, epY); cp1X = x + 0.6187177f * width; cp1Y = y + 0.90885955f * height; cp2X = x + 0.57360977f * width; cp2Y = y + 0.84513277f * height; epX = x + 0.56307495f * width; epY = y + 0.84513277f * height; path.curveTo(cp1X, cp1Y, cp2X, cp2Y, epX, epY); cp1X = x + 0.55685645f * width; cp1Y = y + 0.84513277f * height; cp2X = x + 0.5295878f * width; cp2Y = y + 0.8643272f * height; epX = x + 0.5024781f * width; epY = y + 0.88778704f * height; path.curveTo(cp1X, cp1Y, cp2X, cp2Y, epX, epY); epX = x + 0.45318758f * width; epY = y + 0.9304412f * height; path.lineTo(epX, epY); epX = x + 0.5359526f * width; epY = y + 0.9304412f * height; path.lineTo(epX, epY); cp1X = x + 0.58147347f * width; cp1Y = y + 0.9304412f * height; cp2X = x + 0.6187177f * width; cp2Y = y + 0.9274268f * height; epX = x + 0.6187177f * width; epY = y + 0.9237426f * height; path.curveTo(cp1X, cp1Y, cp2X, cp2Y, epX, epY); } }