2 * 3D bezier intaerpolation curve params
4 * License : The MIT License
5 * Copyright(c) 2011 MikuToga Partners
8 package jp.sourceforge.mikutoga.vmd.model;
11 * 三次ベジェ曲線による補間カーブを記述する。
12 * <p>制御点P0,P1,P2,P3の座標により記述される。
13 * <p>P0は(0,0)で固定。P3は(127,127)で固定。
14 * 残りのP1,P2は、P0,P3を対角線とする正方形の内部に位置しなければならない。
16 public class BezierParam {
19 * 制御点P1のXデフォルト値(直線補間)。
21 public static final byte DEF_P1X = 20;
23 * 制御点P1のYデフォルト値(直線補間)。
25 public static final byte DEF_P1Y = 20;
27 * 制御点P2のXデフォルト値(直線補間)。
29 public static final byte DEF_P2X = 107;
31 * 制御点P2のYデフォルト値(直線補間)。
33 public static final byte DEF_P2Y = 107;
36 * 制御点P1のXデフォルト値(EaseInOut)。
38 public static final byte EIO_P1X = 64;
40 * 制御点P1のYデフォルト値(EaseInOut)。
42 public static final byte EIO_P1Y = 0;
44 * 制御点P2のXデフォルト値(EaseInOut)。
46 public static final byte EIO_P2X = 64;
48 * 制御点P2のYデフォルト値(EaseInOut)。
50 public static final byte EIO_P2Y = 127;
55 public static final byte MIN_VAL = 0;
60 public static final byte MAX_VAL = 127;
63 private byte p1x = DEF_P1X;
64 private byte p1y = DEF_P1Y;
65 private byte p2x = DEF_P2X;
66 private byte p2y = DEF_P2Y;
71 * <p>デフォルトの直線補間が設定される。
82 public byte getP1x() {
90 public byte getP1y() {
98 public byte getP2x() {
106 public byte getP2y() {
112 * @param p1x 制御点P1のX座標
114 public void setP1x(byte p1x) {
121 * @param p1y 制御点P1のY座標
123 public void setP1y(byte p1y) {
130 * @param p2x 制御点P2のX座標
132 public void setP2x(byte p2x) {
139 * @param p2y 制御点P2のY座標
141 public void setP2y(byte p2y) {
148 * @param p1xArg 制御点P1のX座標
149 * @param p1yArg 制御点P1のY座標
151 public void setP1(byte p1xArg, byte p1yArg) {
159 * @param p2xArg 制御点P2のX座標
160 * @param p2yArg 制御点P2のY座標
162 public void setP2(byte p2xArg, byte p2yArg) {
170 * <p>P1,P2双方がP0-P3対角線上に存在する場合を直線補間とする。
173 public boolean isLinear(){
174 if(this.p1x != this.p1y) return false;
175 if(this.p2x != this.p2y) return false;
180 * MMDデフォルトの直線補間か判定する。
181 * @return MMDデフォルトの直線補間ならtrue
183 public boolean isDefaultLinear(){
184 if(this.p1x != DEF_P1X) return false;
185 if(this.p1y != DEF_P1Y) return false;
187 if(this.p2x != DEF_P2X) return false;
188 if(this.p2y != DEF_P2Y) return false;
196 * MMDデフォルトのEaseInOutカーブか判定する。
197 * @return MMDデフォルトのEaseInOutカーブならtrue
199 public boolean isDefaultEaseInOut(){
200 if(this.p1x != EIO_P1X) return false;
201 if(this.p1y != EIO_P1Y) return false;
203 if(this.p2x != EIO_P2X) return false;
204 if(this.p2y != EIO_P2Y) return false;
210 * MMDデフォルトの直線補間に設定する。
212 public void setDefaultLinear(){
221 * MMDデフォルトのEaseInOutカーブに設定する。
223 public void setDefaultEaseInOut(){
233 * @return {@inheritDoc}
236 public String toString(){
237 StringBuilder result = new StringBuilder();
240 result.append("P1=(")
241 .append(this.p1x).append(delim).append(this.p1y).append(") ");
242 result.append("P2=(")
243 .append(this.p2x).append(delim).append(this.p2y).append(")");
245 return result.toString();