当前位置: 首页>>代码示例>>Java>>正文


Java FloatPoint.distance_square方法代码示例

本文整理汇总了Java中geometry.planar.FloatPoint.distance_square方法的典型用法代码示例。如果您正苦于以下问题:Java FloatPoint.distance_square方法的具体用法?Java FloatPoint.distance_square怎么用?Java FloatPoint.distance_square使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在geometry.planar.FloatPoint的用法示例。


在下文中一共展示了FloatPoint.distance_square方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。

示例1: nearest_trace_exit_corner

import geometry.planar.FloatPoint; //导入方法依赖的package包/类
/**
 * Calculates the nearest trace exit point of the pin on p_layer.
 * Returns null, if the pin has no trace exit restrictions.
 */
public FloatPoint nearest_trace_exit_corner(FloatPoint p_from_point, int  p_trace_half_width, int p_layer)
{
     java.util.Collection<Pin.TraceExitRestriction> trace_exit_restrictions = this.get_trace_exit_restrictions(p_layer);
     if (trace_exit_restrictions.isEmpty())
     {
         return null;
     }
     Shape pin_shape = this.get_shape(p_layer - this.first_layer());
     Point pin_center = this.get_center();
     if (!(pin_shape instanceof TileShape))
     {
         return null;
     }
     final double edge_to_turn_dist = this.board.rules.get_pin_edge_to_turn_dist();
     if (edge_to_turn_dist < 0)
     {
         return null;
     }
     TileShape offset_pin_shape = (TileShape)((TileShape)pin_shape).offset(edge_to_turn_dist + p_trace_half_width);

     // calculate the nearest legal pin exit point to trace_entry_location_approx
     double min_exit_corner_distance = Double.MAX_VALUE;
     FloatPoint nearest_exit_corner = null;
     for (Pin.TraceExitRestriction curr_exit_restriction : trace_exit_restrictions)
     {
         int curr_intersecting_border_line_no = offset_pin_shape.intersecting_border_line_no(pin_center, curr_exit_restriction.direction);
         Line curr_pin_exit_ray = new Line(pin_center, curr_exit_restriction.direction);
         FloatPoint curr_exit_corner = curr_pin_exit_ray.intersection_approx(offset_pin_shape.border_line(curr_intersecting_border_line_no));
         double curr_exit_corner_distance = curr_exit_corner.distance_square(p_from_point);
         if (curr_exit_corner_distance  < min_exit_corner_distance)
         {
             min_exit_corner_distance = curr_exit_corner_distance;
             nearest_exit_corner = curr_exit_corner;
         }
     }
     return nearest_exit_corner;
}
 
开发者ID:andrasfuchs,项目名称:BioBalanceDetector,代码行数:42,代码来源:Pin.java

示例2: calc_airline

import geometry.planar.FloatPoint; //导入方法依赖的package包/类
private void calc_airline(Collection<Item> p_from_items, Collection<Item> p_to_items)
{
    FloatPoint from_corner = null;
    FloatPoint to_corner = null;
    double min_distance = Double.MAX_VALUE;
    for (Item curr_from_item : p_from_items)
    {
        if (!(curr_from_item instanceof DrillItem))
        {
            continue;
        }
        FloatPoint curr_from_corner = ((DrillItem) curr_from_item).get_center().to_float();
        for (Item curr_to_item : p_to_items)
        {
            if (!(curr_to_item instanceof DrillItem))
            {
                continue;
            }
            FloatPoint curr_to_corner = ((DrillItem) curr_to_item).get_center().to_float();
            double curr_distance = curr_from_corner.distance_square(curr_to_corner);
            if (curr_distance < min_distance)
            {
                min_distance = curr_distance;
                from_corner = curr_from_corner;
                to_corner = curr_to_corner;
            }
        }
    }
    this.air_line = new FloatLine(from_corner, to_corner);
}
 
开发者ID:andrasfuchs,项目名称:BioBalanceDetector,代码行数:31,代码来源:BatchAutorouter.java

示例3: SwapPinInfo

import geometry.planar.FloatPoint; //导入方法依赖的package包/类
SwapPinInfo(board.Pin p_pin)
{
    pin = p_pin;
    incomplete = null;
    if (p_pin.is_connected() || p_pin.net_count() != 1)
    {
        return;
    }
    // calculate the incomplete of p_pin
    FloatPoint pin_center = p_pin.get_center().to_float();
    double min_dist = Double.MAX_VALUE;
    FloatPoint nearest_point = null;
    Collection<Item> net_items = board.get_connectable_items(p_pin.get_net_no(0));
    for (Item curr_item : net_items)
    {
        if (curr_item == this.pin || !(curr_item instanceof DrillItem))
        {
            continue;
        }
        FloatPoint curr_point = ((DrillItem) curr_item).get_center().to_float();
        double curr_dist = pin_center.distance_square(curr_point);
        if (curr_dist < min_dist)
        {
            min_dist = curr_dist;
            nearest_point = curr_point;
        }
    }
    if (nearest_point != null)
    {
        incomplete = new geometry.planar.FloatLine(pin_center, nearest_point);
    }
}
 
开发者ID:andrasfuchs,项目名称:BioBalanceDetector,代码行数:33,代码来源:Route.java

示例4: Edge

import geometry.planar.FloatPoint; //导入方法依赖的package包/类
private Edge(NetItem p_from_item, FloatPoint p_from_corner, NetItem p_to_item, FloatPoint p_to_corner)
{
    from_item = p_from_item;
    from_corner = p_from_corner;
    to_item = p_to_item;
    to_corner =  p_to_corner;
    length_square = p_to_corner.distance_square(p_from_corner);
}
 
开发者ID:andrasfuchs,项目名称:BioBalanceDetector,代码行数:9,代码来源:NetIncompletes.java

示例5: shove_vias

import geometry.planar.FloatPoint; //导入方法依赖的package包/类
/**
 * Shoves vias out of p_obstacle_shape. Returns false, if the database is damaged, so that an undo is necessary afterwards.
 */
static boolean shove_vias(TileShape p_obstacle_shape, CalcFromSide p_from_side, int p_layer, int[] p_net_no_arr,
        int p_cl_type, Collection<Item> p_ignore_items, int p_max_recursion_depth,
        int p_max_via_recursion_depth, boolean p_copper_sharing_allowed,
        RoutingBoard p_board)
{
    ShapeSearchTree search_tree = p_board.search_tree_manager.get_default_tree();
    ShapeTraceEntries shape_entries =
            new ShapeTraceEntries(p_obstacle_shape, p_layer, p_net_no_arr, p_cl_type, p_from_side, p_board);
    Collection<Item> obstacles =
            search_tree.overlapping_items_with_clearance(p_obstacle_shape, p_layer, new int[0], p_cl_type);
    
    if (!shape_entries.store_items(obstacles, false, p_copper_sharing_allowed))
    {
        return true;
    }
    if (p_ignore_items != null)
    {
        shape_entries.shove_via_list.removeAll(p_ignore_items);
    }
    if (shape_entries.shove_via_list.isEmpty())
    {
        return true;
    }
    double shape_radius = 0.5 * p_obstacle_shape.bounding_box().min_width();
    for (Via curr_via : shape_entries.shove_via_list)
    {
        if (curr_via.shares_net_no(p_net_no_arr))
        {
            continue;
        }
        if (p_max_via_recursion_depth <= 0)
        {
            return true;
        }
        IntPoint [] try_via_centers =
                try_shove_via_points(p_obstacle_shape, p_layer, curr_via, p_cl_type, true, p_board);
        IntPoint new_via_center = null;
        double max_dist = 0.5 * curr_via.get_shape_on_layer(p_layer).bounding_box().max_width() + shape_radius;
        double max_dist_square = max_dist * max_dist;
        IntPoint curr_via_center = (IntPoint) curr_via.get_center();
        FloatPoint check_via_center = curr_via_center.to_float();
        Vector rel_coor = null;
        for (int i = 0; i < try_via_centers.length; ++i)
        {
            if (i == 0 || check_via_center.distance_square(try_via_centers[i].to_float()) <= max_dist_square)
            {
                Collection<Item> ignore_items = new java.util.LinkedList<Item>();
                if (p_ignore_items != null)
                {
                    ignore_items.addAll(p_ignore_items);
                }
                rel_coor = try_via_centers[i].difference_by(curr_via_center);
                // No time limit here because the item database is already changed.
                boolean shove_ok = check(curr_via, rel_coor, p_max_recursion_depth, 
                        p_max_via_recursion_depth - 1, ignore_items, p_board, null);
                if (shove_ok)
                {
                    new_via_center = try_via_centers[i];
                    break;
                }
            }
        }
        if (new_via_center == null)
        {
            continue;
        }
        if (!insert(curr_via, rel_coor, p_max_recursion_depth, p_max_via_recursion_depth - 1, null, p_board))
        {
            return false;
        }
    }
    return true;
}
 
开发者ID:andrasfuchs,项目名称:BioBalanceDetector,代码行数:77,代码来源:MoveDrillItemAlgo.java

示例6: calc_nearest_exit_restriction_direction

import geometry.planar.FloatPoint; //导入方法依赖的package包/类
/**
 * Calculates the nearest exit restriction direction for changing p_trace_polyline.
 * p_trace_polyline is assumed to start at the pin center.
 * Returns null, if there is no matching exit restrictions.
 */
Direction calc_nearest_exit_restriction_direction(Polyline p_trace_polyline, int  p_trace_half_width, int p_layer)
{
    java.util.Collection<Pin.TraceExitRestriction> trace_exit_restrictions = this.get_trace_exit_restrictions(p_layer);
    if (trace_exit_restrictions.isEmpty())
    {
        return null;
    }
    Shape pin_shape = this.get_shape(p_layer - this.first_layer());
    Point pin_center = this.get_center();
    if (!(pin_shape instanceof TileShape))
    {
        return null;
    }
    final double edge_to_turn_dist = this.board.rules.get_pin_edge_to_turn_dist();
    if (edge_to_turn_dist < 0)
    {
        return null;
    }
    TileShape offset_pin_shape = (TileShape)((TileShape)pin_shape).offset(edge_to_turn_dist + p_trace_half_width);
    int [][] entries = offset_pin_shape.entrance_points(p_trace_polyline);
    if (entries.length == 0)
    {
        return null;
    }
    int [] latest_entry_tuple = entries[entries.length - 1];
    FloatPoint trace_entry_location_approx =
            p_trace_polyline.arr[latest_entry_tuple[0]].intersection_approx(offset_pin_shape.border_line(latest_entry_tuple[1]));
    // calculate the nearest legal pin exit point to trace_entry_location_approx
    double min_exit_corner_distance = Double.MAX_VALUE;
    FloatPoint nearest_exit_corner = null;
    Direction pin_exit_direction = null;
    final double TOLERANCE = 1;
    for (Pin.TraceExitRestriction curr_exit_restriction : trace_exit_restrictions)
    {
        int curr_intersecting_border_line_no = offset_pin_shape.intersecting_border_line_no(pin_center, curr_exit_restriction.direction);
        Line curr_pin_exit_ray = new Line(pin_center, curr_exit_restriction.direction);
        FloatPoint curr_exit_corner = curr_pin_exit_ray.intersection_approx(offset_pin_shape.border_line(curr_intersecting_border_line_no));
        double curr_exit_corner_distance = curr_exit_corner.distance_square(trace_entry_location_approx);
        boolean new_nearest_corner_found = false;
        if (curr_exit_corner_distance + TOLERANCE < min_exit_corner_distance)
        {
            new_nearest_corner_found = true;
        }
        else if (curr_exit_corner_distance < min_exit_corner_distance + TOLERANCE)
        {
            // the distances are near equal, compare to the previous corners of p_trace_polyline
            for (int i = 1; i < p_trace_polyline.corner_count(); ++i )
            {
                FloatPoint curr_trace_corner = p_trace_polyline.corner_approx(i);
                double curr_trace_corner_distance = curr_trace_corner.distance_square(curr_exit_corner);
                double old_trace_corner_distance = curr_trace_corner.distance_square(nearest_exit_corner);
                if (curr_trace_corner_distance + TOLERANCE < old_trace_corner_distance)
                {
                    new_nearest_corner_found = true;
                    break;
                }
                else if (curr_trace_corner_distance > old_trace_corner_distance + TOLERANCE)
                {
                    break;
                }
            }
        }
        if (new_nearest_corner_found)
        {
            min_exit_corner_distance = curr_exit_corner_distance;
            pin_exit_direction = curr_exit_restriction.direction;
            nearest_exit_corner = curr_exit_corner;
        }
    }
    return pin_exit_direction;
}
 
开发者ID:andrasfuchs,项目名称:BioBalanceDetector,代码行数:77,代码来源:Pin.java

示例7: enter_through_small_door

import geometry.planar.FloatPoint; //导入方法依赖的package包/类
/**
 * Checks, if the next room can be entered if the door of p_list_element is small.
 * If p_ignore_item != null, p_ignore_item and all other items directly connected to p_ignore_item
 * are ignored in the check.
 */
private boolean enter_through_small_door(MazeListElement p_list_element, Item p_ignore_item)
{
    if (p_list_element.door.get_dimension() != 1)
    {
        return false;
    }
    TileShape door_shape = p_list_element.door.get_shape();

    // Get the line of the 1 dimensional door.
    Line door_line = null;
    FloatPoint prev_corner = door_shape.corner_approx(0);
    int corner_count = door_shape.border_line_count();
    for (int i = 1; i < corner_count; ++i)
    {
        // skip lines of lenghth 0
        FloatPoint next_corner = door_shape.corner_approx(i);
        if (next_corner.distance_square(prev_corner) > 1)
        {
            door_line = door_shape.border_line(i - 1);
            break;
        }
        prev_corner = next_corner;
    }
    if (door_line == null)
    {
        return false;
    }

    IntPoint door_center = door_shape.centre_of_gravity().round();
    int curr_layer = p_list_element.next_room.get_layer();
    int check_radius =
            this.ctrl.compensated_trace_half_width[curr_layer] + AutorouteEngine.TRACE_WIDTH_TOLERANCE;
    // create a perpendicular line segment of length 2 * check_radius through the door center
    Line[] line_arr = new Line[3];
    line_arr[0] = door_line.translate(check_radius);
    line_arr[1] = new Line(door_center, door_line.direction().turn_45_degree(2));
    line_arr[2] = door_line.translate(-check_radius);

    Polyline check_polyline = new Polyline(line_arr);
    TileShape check_shape = check_polyline.offset_shape(check_radius, 0);
    int[] ignore_net_nos = new int[1];
    ignore_net_nos[0] = this.ctrl.net_no;
    Set<SearchTreeObject> overlapping_objects = new TreeSet<SearchTreeObject>();
    this.autoroute_engine.autoroute_search_tree.overlapping_objects(check_shape, curr_layer,
            ignore_net_nos, overlapping_objects);

    for (SearchTreeObject curr_object : overlapping_objects)
    {
        if (!(curr_object instanceof Item) || curr_object == p_ignore_item)
        {
            continue;
        }
        Item curr_item = (Item) curr_object;
        if (!curr_item.shares_net(p_ignore_item))
        {
            return false;
        }
        Set<Item> curr_contacts = curr_item.get_normal_contacts();
        if (!curr_contacts.contains(p_ignore_item))
        {
            return false;
        }
    }
    return true;
}
 
开发者ID:andrasfuchs,项目名称:BioBalanceDetector,代码行数:71,代码来源:MazeSearchAlgo.java


注:本文中的geometry.planar.FloatPoint.distance_square方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。