Package graphmatcher.graph

Examples of graphmatcher.graph.Vertex


    // tMaxDistanceToCenter);

    double lenghtBonus = Math.min(pLengthBonus, tLengthBonus);
    // double distanceBonus = Math.min(pDistanceBonus, tDistanceBonus);

    Vertex pVertex1 = pattern.vertices()[pEdge.vertex1];
    Vertex pVertex2 = pattern.vertices()[pEdge.vertex2];
    Vertex tVertex1 = template.vertices()[tEdge.vertex1];
    Vertex tVertex2 = template.vertices()[tEdge.vertex2];

    // double normedDistance = 0;
    if (matchingOptions.isNoRotation()) {
      Point pCenter = pattern.getCenter();
      Point pHelp = new Point(pCenter.x + 10, pCenter.y);

      Point tCenter = template.getCenter();
      Point tHelp = new Point(tCenter.x + 10, tCenter.y);

      double anglePV1, anglePV2, angleTV1, angleTV2;
      if (match1on1) {
        anglePV1 = AngleHelper.getAngle(pCenter, pHelp, pVertex1.toPoint());
        anglePV2 = AngleHelper.getAngle(pCenter, pHelp, pVertex2.toPoint());
        angleTV1 = AngleHelper.getAngle(tCenter, tHelp, tVertex1.toPoint());
        angleTV2 = AngleHelper.getAngle(tCenter, tHelp, tVertex2.toPoint());
      } else {
        anglePV1 = AngleHelper.getAngle(pCenter, pHelp, pVertex1.toPoint());
        anglePV2 = AngleHelper.getAngle(pCenter, pHelp, pVertex2.toPoint());
        angleTV1 = AngleHelper.getAngle(tCenter, tHelp, tVertex2.toPoint());
        angleTV2 = AngleHelper.getAngle(tCenter, tHelp, tVertex1.toPoint());
      }
      double rating = rateAngle(anglePV1, angleTV1) + rateAngle(anglePV2, angleTV2);
      rating = rating / 2;
      // 0,95
      if (rating < 0.75) {
        return 0;
      }

    }

    // Abst�nde zum Mittelpunkt
    double pV1Dist = DistanceHelper.getDistance(pVertex1.toPoint(), pattern.getCenter());
    double pV2Dist = DistanceHelper.getDistance(pVertex2.toPoint(), pattern.getCenter());
    double tV1Dist = DistanceHelper.getDistance(tVertex1.toPoint(), template.getCenter());
    double tV2Dist = DistanceHelper.getDistance(tVertex2.toPoint(), template.getCenter());

    double bestDistToCenterRatio;
    if (match1on1) {
      bestDistToCenterRatio = (rate(pV1Dist, pMaxDistanceToCenter, tV1Dist, tMaxDistanceToCenter) + rate(
          pV2Dist, pMaxDistanceToCenter, tV2Dist, tMaxDistanceToCenter)) / 2;
    } else {
      bestDistToCenterRatio = (rate(pV1Dist, pMaxDistanceToCenter, tV2Dist, tMaxDistanceToCenter) + rate(
          pV2Dist, pMaxDistanceToCenter, tV1Dist, tMaxDistanceToCenter)) / 2;
    }

    double lengthRatio = rate(pEdgeLength, pMaxDistanceToCenter, tEdgeLength, tMaxDistanceToCenter);

    // Winkel
    double pAngle, tAngle;
    if (match1on1) {
      pAngle = AngleHelper.getAngle(pVertex1.toPoint(), pattern.getCenter(), pVertex2.toPoint());
      tAngle = AngleHelper.getAngle(tVertex1.toPoint(), template.getCenter(), tVertex2.toPoint());
    } else {
      pAngle = AngleHelper.getAngle(pVertex1.toPoint(), pattern.getCenter(), pVertex2.toPoint());
      tAngle = AngleHelper.getAngle(tVertex2.toPoint(), template.getCenter(), tVertex1.toPoint());
    }
    double angleDiff = AngleHelper.getDiffAngle(pAngle, tAngle);
    double angleRatio = (180 - angleDiff) / 180;
    angleRatio += lenghtBonus + 0.05;
    if (angleRatio > 1) {
View Full Code Here


  private static double rateMatchingPair2(Graph pattern, Graph template, Edge pEdgeA, Edge tEdgeA,
      boolean match1To1A, Edge pEdgeB, Edge tEdgeB, boolean match1To1B) {
    double averageDistanceInPattern = pattern.getAverageDistanceToCenterInGraph();
    double averageDistanceInTemplate = template.getAverageDistanceToCenterInGraph();

    Vertex v1pa, v2pa, v1ta, v2ta;
    v1pa = pattern.vertices()[pEdgeA.vertex1];
    v2pa = pattern.vertices()[pEdgeA.vertex2];
    if (match1To1A) {
      v1ta = template.vertices()[tEdgeA.vertex1];
      v2ta = template.vertices()[tEdgeA.vertex2];
    } else {
      v1ta = template.vertices()[tEdgeA.vertex2];
      v2ta = template.vertices()[tEdgeA.vertex1];
    }

    Vertex v1pb, v2pb, v1tb, v2tb;
    v1pb = pattern.vertices()[pEdgeB.vertex1];
    v2pb = pattern.vertices()[pEdgeB.vertex2];
    if (match1To1B) {
      v1tb = template.vertices()[tEdgeB.vertex1];
      v2tb = template.vertices()[tEdgeB.vertex2];
    } else {
      v1tb = template.vertices()[tEdgeB.vertex2];
      v2tb = template.vertices()[tEdgeB.vertex1];
    }

    double dist_v1pa_v1pb = DistanceHelper.getDistance(v1pa, v1pb);
    double dist_v1ta_v1tb = DistanceHelper.getDistance(v1ta, v1tb);

    double dist_v1pa_v2pb = DistanceHelper.getDistance(v1pa, v2pb);
    double dist_v1ta_v2tb = DistanceHelper.getDistance(v1ta, v2tb);

    double dist_v2pa_v1pb = DistanceHelper.getDistance(v2pa, v1pb);
    double dist_v2ta_v1tb = DistanceHelper.getDistance(v2ta, v1tb);

    double dist_v2pa_v2pb = DistanceHelper.getDistance(v2pa, v2pb);
    double dist_v2ta_v2tb = DistanceHelper.getDistance(v2ta, v2tb);

    double distanceRatio = 0;
    // double maxDistanceToCenter =
    // Math.min(pattern.getMaximumVertexDistanceToCenter(), template
    // .getMaximumVertexDistanceToCenter())
    // / Math.max(averageDistanceInPattern, averageDistanceInTemplate);

    double pNorm = pattern.getMaximumVertexDistanceToCenter();
    double tNorm = template.getMaximumVertexDistanceToCenter();
    double distanceRatio1 = rate(dist_v1pa_v1pb, pNorm, dist_v1ta_v1tb, tNorm);
    double distanceRatio2 = rate(dist_v1pa_v2pb, pNorm, dist_v1ta_v2tb, tNorm);
    double distanceRatio3 = rate(dist_v2pa_v1pb, pNorm, dist_v2ta_v1tb, tNorm);
    double distanceRatio4 = rate(dist_v2pa_v2pb, pNorm, dist_v2ta_v2tb, tNorm);

    distanceRatio = Math.min(Math.min(distanceRatio1, distanceRatio2), Math.min(distanceRatio3,
        distanceRatio4));
    // distanceRatio = (distanceRatio1 + distanceRatio2 + distanceRatio3 +
    // distanceRatio4) / 4;

    // TODO: umbauen zu Winkel zwischen Kantenmittelpunkten
    Point patternCenter = pattern.getCenter();
    Point templateCenter = template.getCenter();
    double angle_v1pa_v1pb = AngleHelper.getAngle(patternCenter, v1pa.toPoint(), v1pb.toPoint());
    double angle_v1ta_v1tb = AngleHelper.getAngle(templateCenter, v1ta.toPoint(), v1tb.toPoint());
    double angleDiff1 = AngleHelper.getDiffAngle(angle_v1pa_v1pb, angle_v1ta_v1tb);

    double angle_v2pa_v2pb = AngleHelper.getAngle(patternCenter, v2pa.toPoint(), v2pb.toPoint());
    double angle_v2ta_v2tb = AngleHelper.getAngle(templateCenter, v2ta.toPoint(), v2tb.toPoint());
    double angleDiff2 = AngleHelper.getDiffAngle(angle_v2pa_v2pb, angle_v2ta_v2tb);
    double angleRatio = (360d - angleDiff1 - angleDiff2) / 360d;

    Point pCenter = pattern.getCenter();
    double v1paDistance = DistanceHelper.getDistance(pCenter, v1pa.toPoint()) / averageDistanceInPattern;
    double v2paDistance = DistanceHelper.getDistance(pCenter, v2pa.toPoint()) / averageDistanceInPattern;
    double v1pbDistance = DistanceHelper.getDistance(pCenter, v1pb.toPoint()) / averageDistanceInPattern;
    double v2pbDistance = DistanceHelper.getDistance(pCenter, v2pb.toPoint()) / averageDistanceInPattern;

    Point tCenter = template.getCenter();
    double v1taDistance = DistanceHelper.getDistance(tCenter, v1ta.toPoint()) / averageDistanceInTemplate;
    double v2taDistance = DistanceHelper.getDistance(tCenter, v2ta.toPoint()) / averageDistanceInTemplate;
View Full Code Here

  public static boolean similarEdges(Graph graph, int edgeID1, int edgeID2, boolean v1Tov1) {
    Edge edge1 = graph.virtualEdges()[edgeID1];
    Edge edge2 = graph.virtualEdges()[edgeID2];

    Vertex vertex1_1 = graph.vertices()[edge1.vertex1];
    Vertex vertex1_2 = graph.vertices()[edge1.vertex2];
    Vertex vertex2_1 = graph.vertices()[edge2.vertex1];
    Vertex vertex2_2 = graph.vertices()[edge2.vertex2];

    Rectangle rectangle = graph.getRectangle();
    int tolerance = Math.max(rectangle.height, rectangle.width) / 15;
    if (v1Tov1) {
      if (DistanceHelper.getDistance(vertex1_1, vertex2_1) > tolerance) {
View Full Code Here

TOP

Related Classes of graphmatcher.graph.Vertex

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.