Ejemplo n.º 1
0
        //格子番号から正規化された点を取得
        public LDPoint getNormalizedPoint(int row, int col)
        {
            LDPoint p = new LDPoint();

            p.setX(1.0f / getColumn() * row);
            p.setY(1.0f / getRow() * col);
            return(p);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// TODO: LDPoint注意
        /// </summary>
        /// <param name="pt"></param>
        /// <param name="clip"></param>
        /// <returns></returns>
        public LDPoint inverseTransform(LDPoint pt, bool clip = false)
        {
            if (getColumn() == 0 && getRow() == 0)
            {
                //メッシュがない場合はそのままの値を返す
                return(pt);
            }

            double x = pt.x();
            double y = pt.y();


            //Gridからマッピング先のQuadを見つける
            LDPoint index = getMapedQuadIndex(new LDPoint((float)x, (float)y));
            int     col   = (int)index.x();
            int     row   = (int)index.y();

            if (clip)
            {
                //Grid内にClipする。QuadをClipして変換するのではない
                col = LDMathUtil.clamp(col, 0, getColumn());
                row = LDMathUtil.clamp(row, 0, getRow());
            }

            LDPoint local = new LDPoint();

            if (isOutside(row, col))
            {
                LDQuadTransform quad = createOutsideQuadTransform(row, col);
                return(quad.inverseTransform(pt, clip));

                //TODO:到達しない場所あります
                local = quad.inverseTransform(pt, clip);

                LDPoint _internal;
                _internal.setX((col + 1) * (1.0f / (getColumn() + 2)) + local.x() / (getColumn() + 2));
                _internal.setY((row + 1) * (1.0f / (getRow() + 2)) + local.y() / (getRow() + 2));

                LDQuadTransform tmp = new LDQuadTransform(new LDPoint(-1, -1), new LDPoint(getColumn() + 1, getRow() + 1));
                return(tmp.transform(_internal));
            }
            else
            {
                LDQuadTransform quad = getQuadTransform(row, col);
                local = quad.inverseTransform(pt, clip);

                LDPoint _internal = new LDPoint();
                _internal.setX(col * (1.0f / getColumn()) + local.x() / getColumn());
                _internal.setY(row * (1.0f / getRow()) + local.y() / getRow());

                return(_internal);
            }
        }
Ejemplo n.º 3
0
        //Gridの内分率からQuadのローカルな内分率を取得する
        public LDPoint getLocalPoint(LDPoint t)
        {
            double tx = t.x();
            double ty = t.y();

            LDPoint localT = new LDPoint();

            if (tx == 0)
            {
                localT.setX(0);
            }
            else if (tx == 1)
            {
                localT.setX(1);
            }
            else
            {
                double scaled = tx * getColumn();
                //小数部を求める
                localT.setX((float)scaled - (int)Math.Truncate(scaled));
            }


            if (ty == 0)
            {
                localT.setY(0);
            }
            else if (ty == 1)
            {
                localT.setY(1);
            }
            else
            {
                double scaled = ty * getRow();
                //小数部を求める
                localT.setY((float)scaled - (int)Math.Truncate(scaled));
            }

            return(localT);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// TODO: LDPoint注意
        /// </summary>
        /// <param name="pt"></param>
        /// <param name="clip"></param>
        /// <returns></returns>
        public LDPoint inverseTransform(LDPoint pt, bool clip = false)
        {
            if (getColumn() == 0 && getRow() == 0)
            {
                //メッシュがない場合はそのままの値を返す
                return pt;
            }

            double x = pt.x();
            double y = pt.y();

            //Gridからマッピング先のQuadを見つける
            LDPoint index = getMapedQuadIndex(new LDPoint((float)x, (float)y));
            int col = (int)index.x();
            int row = (int)index.y();

            if (clip)
            {
                //Grid内にClipする。QuadをClipして変換するのではない
                col = LDMathUtil.clamp(col, 0, getColumn());
                row = LDMathUtil.clamp(row, 0, getRow());
            }

            LDPoint local = new LDPoint();

            if (isOutside(row, col))
            {
                LDQuadTransform quad = createOutsideQuadTransform(row, col);
                return quad.inverseTransform(pt, clip);

                //TODO:到達しない場所あります
                local = quad.inverseTransform(pt, clip);

                LDPoint _internal=new LDPoint();
                _internal.setX((col + 1) * (1.0f / (getColumn() + 2)) + local.x() / (getColumn() + 2));
                _internal.setY((row + 1) * (1.0f / (getRow() + 2)) + local.y() / (getRow() + 2));

                LDQuadTransform tmp = new LDQuadTransform(new LDPoint(-1, -1), new LDPoint(getColumn() + 1, getRow() + 1));
                return tmp.transform(_internal);
            }
            else
            {
                LDQuadTransform quad = getQuadTransform(row, col);
                local = quad.inverseTransform(pt, clip);

                LDPoint _internal = new LDPoint();
                _internal.setX(col * (1.0f / getColumn()) + local.x() / getColumn());
                _internal.setY(row * (1.0f / getRow()) + local.y() / getRow());

                return _internal;
            }
        }
Ejemplo n.º 5
0
 //格子番号から正規化された点を取得
 public LDPoint getNormalizedPoint(int row, int col)
 {
     LDPoint p=new LDPoint();
     p.setX(1.0f / getColumn() * row);
     p.setY(1.0f / getRow() * col);
     return p;
 }
Ejemplo n.º 6
0
        //Gridの内分率からQuadのローカルな内分率を取得する
        public LDPoint getLocalPoint(LDPoint t)
        {
            double tx = t.x();
            double ty = t.y();

            LDPoint localT = new LDPoint();
            if (tx == 0)
            {
                localT.setX(0);
            }
            else if (tx == 1)
            {
                localT.setX(1);
            }
            else
            {
                double scaled = tx * getColumn();
                //小数部を求める
                localT.setX((float)scaled - (int)Math.Truncate(scaled));
            }

            if (ty == 0)
            {
                localT.setY(0);
            }
            else if (ty == 1)
            {
                localT.setY(1);
            }
            else
            {
                double scaled = ty * getRow();
                //小数部を求める
                localT.setY((float)scaled - (int)Math.Truncate(scaled));
            }

            return localT;
        }