当前位置: 首页 > 面试题库 >

使用PathIterator返回约束一个Area的所有线段?

令狐功
2023-03-14
问题内容

在Java中,人们将如何PathIterator遍历约束an的线段Area?该Area仅由线的约束(但曲线的支持不会伤害)。

该方法应返回所有线段的集合。


问题答案:

这是可行的(我相信在所有情况下),但可能需要进行更彻底的测试:

Area area; // The value is set elsewhere in the code    
ArrayList<double[]> areaPoints = new ArrayList<double[]>();
ArrayList<Line2D.Double> areaSegments = new ArrayList<Line2D.Double>();
double[] coords = new double[6];

for (PathIterator pi = area.getPathIterator(null); !pi.isDone(); pi.next()) {
    // The type will be SEG_LINETO, SEG_MOVETO, or SEG_CLOSE
    // Because the Area is composed of straight lines
    int type = pi.currentSegment(coords);
    // We record a double array of {segment type, x coord, y coord}
    double[] pathIteratorCoords = {type, coords[0], coords[1]};
    areaPoints.add(pathIteratorCoords);
}

double[] start = new double[3]; // To record where each polygon starts

for (int i = 0; i < areaPoints.size(); i++) {
    // If we're not on the last point, return a line from this point to the next
    double[] currentElement = areaPoints.get(i);

    // We need a default value in case we've reached the end of the ArrayList
    double[] nextElement = {-1, -1, -1};
    if (i < areaPoints.size() - 1) {
        nextElement = areaPoints.get(i + 1);
    }

    // Make the lines
    if (currentElement[0] == PathIterator.SEG_MOVETO) {
        start = currentElement; // Record where the polygon started to close it later
    }

    if (nextElement[0] == PathIterator.SEG_LINETO) {
        areaSegments.add(
                new Line2D.Double(
                    currentElement[1], currentElement[2],
                    nextElement[1], nextElement[2]
                )
            );
    } else if (nextElement[0] == PathIterator.SEG_CLOSE) {
        areaSegments.add(
                new Line2D.Double(
                    currentElement[1], currentElement[2],
                    start[1], start[2]
                )
            );
    }
}

// areaSegments now contains all the line segments


 类似资料:
  • 我有一组这样的对象: 我想对其进行过滤,以便每个唯一名称都有一个实例,该实例必须给出小于或等于40的最大值。如果过滤,上述情况将返回: 最终的数组不必按任何特定的顺序排序。

  • 我有一个UIImageView,我想在背景上用平移效果慢慢动画。我的背景图像视图有四个约束: 从顶部到顶部布局指南的距离(零) 图像视图的视图模式设置为“纵横比填充”。当我运行我的应用程序时,没有问题,会显示静态图像。我添加以下代码来设置视图的动画: 然后我调用[self-AnimateBackground Horizontal:YES] 视图将显示:。发生的情况如下: 图像从一个意外(但始终相同

  • 这就是古老而著名的背包问题:背包问题 这里我有一个有约束的背包问题。 我有一个大小为W=100000000和N=100项的背包,我为它写了动态解。我的算法复杂度为,这在时间和空间上都太大了,但这里有一个条件,所以如果我的背包大小超过50000,我的项的最大值是有限的。 所以现在我想知道如何用这个条件我认为背包问题取决于背包的大小和物品的数量,那么物品的值如何才能改变我的算法呢?

  • 我设置了一个动画,以在打开另一个开关/标签时隐藏一个开关/标签。同时,刚刚打开的开关向上移动。这里的简单解释非常有效。 但是,当我在开关/标签关闭后尝试向下移动时,它不会移动。另一个开关会很好地重新出现,但不会触发顶部约束更改。 我对这种类型的设置和动画都是以编程方式进行的相对较新,在花了一个小时之后,我被难住了。是因为我正在制作相对于另一个顶部约束的动画吗?如果它第一次工作,这有什么关系?即使隐

  • 我有一个UIView,它通过几个约束被放置在屏幕上。一些约束由superview拥有,另一些约束由其他祖先拥有(例如,可能是UIViewController的view属性)。 要澄清这些解决方案的问题,请考虑以下视图层次结构: 爷爷 父亲 我 儿子 女儿 现在假设我们创建了以下约束,并始终将它们附加到它们最近的共同祖先: null

  • 问题内容: 假设我们有这些表: 是否有可能在上创建唯一约束,使得对于最多一个引用中的所有行,其值都为??陈述另一种方法,我可以创建一个唯一约束,以便上述表的连接没有重复项吗?我没有考虑- 我可以找到的每个数据库的语法似乎都与每个约束都限制在一个表上- 但这可能是我缺乏想象力的原因。(当然,去规范化以包含on是一种解决方案。) 问题答案: 您可以尝试以下方法。您必须在Parent中创建一个冗余的UN