Package de.lmu.ifi.dbs.elki.math.linearalgebra

Examples of de.lmu.ifi.dbs.elki.math.linearalgebra.Vector


      System.arraycopy(s, ldim + 1, r, ldim + 2, hdim - (ldim + 1));
    }
    if(hdim + 1 < s.length) {
      System.arraycopy(s, hdim + 1, r, hdim + 1, s.length - (hdim + 1));
    }
    return new Vector(r);
  }
View Full Code Here


    }
    // hdim = s[0 or 1]
    if(hdim + 1 < s.length) {
      System.arraycopy(s, hdim + 1, r, hdim + 1, s.length - (hdim + 1));
    }
    return new Vector(r);
  }
View Full Code Here

  @Override
  protected void redraw() {
    int dim = DatabaseUtil.dimensionality(rel);

    // origin
    double[] orig = proj.fastProjectScaledToRender(new Vector(dim));
    // diagonal point opposite to origin
    double[] diag = new double[dim];
    for(int d2 = 0; d2 < dim; d2++) {
      diag[d2] = 1;
    }
    diag = proj.fastProjectScaledToRender(new Vector(diag));
    // compute angle to diagonal line, used for axis labeling.
    double diaga = Math.atan2(diag[1] - orig[1], diag[0] - orig[0]);

    double alfontsize = 1.2 * context.getStyleLibrary().getTextSize(StyleLibrary.AXIS_LABEL);
    CSSClass alcls = new CSSClass(svgp, "unmanaged");
    alcls.setStatement(SVGConstants.CSS_FONT_SIZE_PROPERTY, SVGUtil.fmt(alfontsize));
    alcls.setStatement(SVGConstants.CSS_FILL_PROPERTY, context.getStyleLibrary().getTextColor(StyleLibrary.AXIS_LABEL));
    alcls.setStatement(SVGConstants.CSS_FONT_FAMILY_PROPERTY, context.getStyleLibrary().getFontFamily(StyleLibrary.AXIS_LABEL));

    // draw axes
    for(int d = 0; d < dim; d++) {
      Vector v = new Vector(dim);
      v.set(d, 1);
      // projected endpoint of axis
      double[] ax = proj.fastProjectScaledToRender(v);
      boolean righthand = false;
      double axa = Math.atan2(ax[1] - orig[1], ax[0] - orig[0]);
      if(axa > diaga || (diaga > 0 && axa > diaga + Math.PI)) {
View Full Code Here

   * @param mid mean vector
   * @param rad radius
   * @return path element
   */
  public static <V extends NumberVector<V, ?>, D extends NumberDistance<?, ?>> Element drawManhattan(SVGPlot svgp, Projection2D proj, V mid, D rad) {
    Vector v_mid = mid.getColumnVector();
    BitSet dims = proj.getVisibleDimensions2D();

    SVGPath path = new SVGPath();
    for(int dim = dims.nextSetBit(0); dim >= 0; dim = dims.nextSetBit(dim + 1)) {
      Vector v1 = v_mid.copy();
      v1.set(dim, v1.get(dim) + rad.doubleValue());
      Vector v2 = v_mid.copy();
      v2.set(dim, v2.get(dim) - rad.doubleValue());
      double[] p1 = proj.fastProjectDataToRenderSpace(v1);
      double[] p2 = proj.fastProjectDataToRenderSpace(v2);
      for(int dim2 = dims.nextSetBit(0); dim2 >= 0; dim2 = dims.nextSetBit(dim2 + 1)) {
        if(dim < dim2) {
          Vector v3 = v_mid.copy();
          v3.set(dim2, v3.get(dim2) + rad.doubleValue());
          Vector v4 = v_mid.copy();
          v4.set(dim2, v4.get(dim2) - rad.doubleValue());
          double[] p3 = proj.fastProjectDataToRenderSpace(v3);
          double[] p4 = proj.fastProjectDataToRenderSpace(v4);

          path.moveTo(p1[0], p1[1]);
          path.drawTo(p3[0], p3[1]);
View Full Code Here

   * @param mid mean vector
   * @param rad radius
   * @return path element
   */
  public static <V extends NumberVector<V, ?>, D extends NumberDistance<?, ?>> Element drawEuclidean(SVGPlot svgp, Projection2D proj, V mid, D rad) {
    Vector v_mid = mid.getColumnVector();
    BitSet dims = proj.getVisibleDimensions2D();

    SVGPath path = new SVGPath();
    for(int dim = dims.nextSetBit(0); dim >= 0; dim = dims.nextSetBit(dim + 1)) {
      Vector v1 = v_mid.copy();
      v1.set(dim, v1.get(dim) + rad.doubleValue());
      Vector v2 = v_mid.copy();
      v2.set(dim, v2.get(dim) - rad.doubleValue());
      double[] p1 = proj.fastProjectDataToRenderSpace(v1);
      double[] p2 = proj.fastProjectDataToRenderSpace(v2);
      // delta vector
      Vector dt1 = new Vector(v1.getDimensionality());
      dt1.set(dim, rad.doubleValue());
      double[] d1 = proj.fastProjectRelativeDataToRenderSpace(dt1);
      for(int dim2 = dims.nextSetBit(0); dim2 >= 0; dim2 = dims.nextSetBit(dim2 + 1)) {
        if(dim < dim2) {
          Vector v3 = v_mid.copy();
          v3.set(dim2, v3.get(dim2) + rad.doubleValue());
          Vector v4 = v_mid.copy();
          v4.set(dim2, v4.get(dim2) - rad.doubleValue());
          double[] p3 = proj.fastProjectDataToRenderSpace(v3);
          double[] p4 = proj.fastProjectDataToRenderSpace(v4);
          // delta vector
          Vector dt2 = new Vector(v2.getDimensionality());
          dt2.set(dim2, rad.doubleValue());
          double[] d2 = proj.fastProjectRelativeDataToRenderSpace(dt2);

          path.moveTo(p1[0], p1[1]);
          path.cubicTo(p1[0] + d2[0] * EUCLIDEAN_KAPPA, p1[1] + d2[1] * EUCLIDEAN_KAPPA, p3[0] + d1[0] * EUCLIDEAN_KAPPA, p3[1] + d1[1] * EUCLIDEAN_KAPPA, p3[0], p3[1]);
          path.cubicTo(p3[0] - d1[0] * EUCLIDEAN_KAPPA, p3[1] - d1[1] * EUCLIDEAN_KAPPA, p2[0] + d2[0] * EUCLIDEAN_KAPPA, p2[1] + d2[1] * EUCLIDEAN_KAPPA, p2[0], p2[1]);
View Full Code Here

   */
  private void visualizeRTreeEntry(SVGPlot svgp, Element layer, Projection2D proj, AbstractRStarTree<? extends N, E> rtree, E entry, int depth) {
    SpatialComparable mbr = entry;

    if(fill) {
      Element r = SVGHyperCube.drawFilled(svgp, INDEX + depth, proj, new Vector(SpatialUtil.getMin(mbr)), new Vector(SpatialUtil.getMax(mbr)));
      layer.appendChild(r);
    }
    else {
      Element r = SVGHyperCube.drawFrame(svgp, proj, new Vector(SpatialUtil.getMin(mbr)), new Vector(SpatialUtil.getMax(mbr)));
      SVGUtil.setCSSClass(r, INDEX + depth);
      layer.appendChild(r);
    }

    if(!entry.isLeafEntry()) {
View Full Code Here

   * @param rad radius
   * @param p L_p value
   * @return path element
   */
  public static <V extends NumberVector<V, ?>, D extends NumberDistance<?, ?>> Element drawLp(SVGPlot svgp, Projection2D proj, V mid, D rad, double p) {
    Vector v_mid = mid.getColumnVector();
    BitSet dims = proj.getVisibleDimensions2D();

    final double kappax, kappay;
    if(p > 1.) {
      double kappal = Math.pow(0.5, 1. / p);
      kappax = Math.min(1.3, 4. * (2 * kappal - 1) / 3.);
      kappay = 0;
    }
    else if(p < 1.) {
      double kappal = 1 - Math.pow(0.5, 1. / p);
      kappax = 0;
      kappay = Math.min(1.3, 4. * (2 * kappal - 1) / 3.);
    }
    else {
      kappax = 0;
      kappay = 0;
    }
    // LoggingUtil.warning("kappax: " + kappax + " kappay: " + kappay);

    SVGPath path = new SVGPath();
    for(int dim = dims.nextSetBit(0); dim >= 0; dim = dims.nextSetBit(dim + 1)) {
      Vector vp0 = v_mid.copy();
      vp0.set(dim, vp0.get(dim) + rad.doubleValue());
      Vector vm0 = v_mid.copy();
      vm0.set(dim, vm0.get(dim) - rad.doubleValue());
      double[] pvp0 = proj.fastProjectDataToRenderSpace(vp0);
      double[] pvm0 = proj.fastProjectDataToRenderSpace(vm0);
      // delta vector
      Vector tvd0 = new Vector(vp0.getDimensionality());
      tvd0.set(dim, rad.doubleValue());
      double[] vd0 = proj.fastProjectRelativeDataToRenderSpace(tvd0);
      for(int dim2 = dims.nextSetBit(0); dim2 >= 0; dim2 = dims.nextSetBit(dim2 + 1)) {
        if(dim < dim2) {
          Vector v0p = v_mid.copy();
          v0p.set(dim2, v0p.get(dim2) + rad.doubleValue());
          Vector v0m = v_mid.copy();
          v0m.set(dim2, v0m.get(dim2) - rad.doubleValue());
          double[] pv0p = proj.fastProjectDataToRenderSpace(v0p);
          double[] pv0m = proj.fastProjectDataToRenderSpace(v0m);
          // delta vector
          Vector tv0d = new Vector(vm0.getDimensionality());
          tv0d.set(dim2, rad.doubleValue());
          double[] v0d = proj.fastProjectRelativeDataToRenderSpace(tv0d);

          if(p > 1) {
            // p > 1
            path.moveTo(pvp0[0], pvp0[1]);
View Full Code Here

   * @param mid mean vector
   * @param rad radius
   * @return path element
   */
  public static <V extends NumberVector<V, ?>, D extends NumberDistance<?, ?>> Element drawCross(SVGPlot svgp, Projection2D proj, V mid, D rad) {
    Vector v_mid = mid.getColumnVector();
    BitSet dims = proj.getVisibleDimensions2D();

    SVGPath path = new SVGPath();
    for(int dim = dims.nextSetBit(0); dim >= 0; dim = dims.nextSetBit(dim + 1)) {
      Vector v1 = v_mid.copy();
      v1.set(dim, v1.get(dim) + rad.doubleValue());
      Vector v2 = v_mid.copy();
      v2.set(dim, v2.get(dim) - rad.doubleValue());
      double[] p1 = proj.fastProjectDataToRenderSpace(v1);
      double[] p2 = proj.fastProjectDataToRenderSpace(v2);
      path.moveTo(p1[0], p1[1]);
      path.drawTo(p2[0], p2[1]);
      path.close();
View Full Code Here

          min[d] = proj.getScale(d).getMin();
          max[d] = proj.getScale(d).getMax();
        }
      }
      if(nofill) {
        Element r = SVGHyperCube.drawFrame(svgp, proj, new Vector(min), new Vector(max));
        SVGUtil.setCSSClass(r, CSS_CUBEFRAME);
        layer.appendChild(r);
      }
      else {
        Element r = SVGHyperCube.drawFilled(svgp, CSS_CUBE, proj, new Vector(min), new Vector(max));
        layer.appendChild(r);
      }

    }
  }
View Full Code Here

      DBIDs ids = clus.getIDs();

      if(ids.size() > 0) {
        Matrix covmat = clus.getModel().getCovarianceMatrix();
        NV centroid = clus.getModel().getMean();
        Vector cent = new Vector(proj.fastProjectDataToRenderSpace(centroid));

        // Compute the eigenvectors
        SortedEigenPairs eps = pcarun.processCovarMatrix(covmat).getEigenPairs();

        Vector[] pc = new Vector[eps.size()];
        for(int i = 0; i < eps.size(); i++) {
          EigenPair ep = eps.getEigenPair(i);
          Vector sev = ep.getEigenvector().times(Math.sqrt(ep.getEigenvalue()));
          pc[i] = new Vector(proj.fastProjectRelativeDataToRenderSpace(sev.getArrayRef()));
        }
        if(drawStyle != 0 || eps.size() == 2) {
          drawSphere2D(cnum, cent, pc);
        }
        else {
View Full Code Here

TOP

Related Classes of de.lmu.ifi.dbs.elki.math.linearalgebra.Vector

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.