Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获取和打印曲线坐标?_Java_Coordinates_Bezier - Fatal编程技术网

Java 如何获取和打印曲线坐标?

Java 如何获取和打印曲线坐标?,java,coordinates,bezier,Java,Coordinates,Bezier,我用.curveTo方法用贝塞尔曲线画一条曲线。现在,我想用Hausdorff距离法计算像素坐标之间的距离。我手动设置起点、控制点和终点。如何获取并打印曲线经过的所有(x,y)坐标?至少,对于右边或左边的眉毛 这是我的源代码: package emodetection; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import

我用.curveTo方法用贝塞尔曲线画一条曲线。现在,我想用Hausdorff距离法计算像素坐标之间的距离。我手动设置起点、控制点和终点。如何获取并打印曲线经过的所有(x,y)坐标?至少,对于右边或左边的眉毛

这是我的源代码:

package emodetection;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.geom.Path2D;
import java.awt.image.BufferedImage;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;


public class Bezier extends JPanel {

private static BufferedImage bi;
private static int w;
private static int h;

public Bezier() {
    ImageIcon ii = new ImageIcon("images/output.jpg");
    Image img = ii.getImage();
    int imageWidth = img.getWidth(this);
    int imageHeight = img.getHeight(this);
    w = imageWidth/2;
    h = imageHeight/2;

    bi = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_ARGB);
    Graphics g = bi.createGraphics();
    g.drawImage(img, 0, 0, (int) w, (int) h, this);
    ImageIcon newii = new ImageIcon(bi);

    System.out.println("img height is " + img.getHeight(this));
    JLabel imageLabel = new JLabel("", newii, JLabel.RIGHT);
    super.add(imageLabel, JPanel.RIGHT_ALIGNMENT);
}

// Draw curve line in an image
public void paintComponent (Graphics g) {
    super.paintComponent(g);
    Graphics2D g2 = bi.createGraphics();

    ImageIcon ii = new ImageIcon("image/output.jpg");
    JLabel imageLabel = new JLabel("Face", ii, JLabel.CENTER);
    JPanel jp = new JPanel(new BorderLayout());
    jp.add(imageLabel, BorderLayout.CENTER);

    g2.setColor(Color.BLUE);

    // Right eyebrow
    Path2D rightEB = new Path2D.Double();
    rightEB.moveTo(80/2, 260/2);
    rightEB.curveTo(79/2, 169/2, 316/2, 171/2, 314/2, 196/2);
    g2.draw(rightEB);

    // Left eyebrow
    Path2D leftEB = new Path2D.Double();
    leftEB.moveTo(698/2, 227/2);
    leftEB.curveTo(702/2, 154/2, 465/2, 155/2, 467/2, 184/2);
    g2.draw(leftEB);

    // Right eye
    Path2D re1 = new Path2D.Double();
    re1.moveTo(156/2, 312/2);
    re1.curveTo(156/2, 278/2, 313/2, 277/2, 318/2, 321/2);
    g2.draw(re1);

    Path2D re2 = new Path2D.Double();
    re2.moveTo(156/2, 312/2);
    re2.curveTo(156/2, 342/2, 319/2, 338/2, 318/2, 321/2);
    g2.draw(re2);

    // Left eye
    Path2D le1 = new Path2D.Double();
    le1.moveTo(481/2, 310/2);
    le1.curveTo(480/2, 265/2, 642/2, 264/2, 642/2, 300/2);
    g2.draw(le1);

    Path2D le2 = new Path2D.Double();
    le2.moveTo(481/2, 310/2);
    le2.curveTo(481/2, 336/2, 642/2, 337/2, 642/2, 300/2);
    g2.draw(le2);

    // Lip
    // Upper lip
    Path2D m1 = new Path2D.Double();
    m1.moveTo(238/2, 657/2);
    m1.curveTo(238/2, 626/2, 577/2, 626/2, 577/2, 647/2);
    System.out.println(m1.getPathIterator(null));
    g2.draw(m1);
    // Lower lip
    Path2D m2 = new Path2D.Double();
    m2.moveTo(238/2, 657/2);
    m2.curveTo(238/2, 788/2, 579/2, 788/2, 577/2, 647/2);
    g2.draw(m2);

}

public static void main(String[] args) {
    JFrame frame = new JFrame("Testing Bezier Curve");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Bezier bezier = new Bezier();
    frame.add(bezier);
    frame.setSize(w*3, h);
    frame.setVisible(true);
}

}

我非常感谢您提供的任何帮助。

像素坐标之间的距离是什么意思?因为曲线的长度与像素之间的距离之和不同。曲线是通过连接一些x,y坐标构建的。我想知道(例如)x1,y1和x2,y2之间的距离。是的,但是哪个距离?沿贝塞尔曲线的距离?直线距离P2-P1?基于为离散像素着色的绘制算法的聚合距离?您认为需要“使用Hausdorff距离法计算像素坐标之间的距离”的实际操作是什么?沿曲线的距离。我可以使用Shape和Rectangle类来获取面积,并使用Path2D.contains(Point2D)检查包含的曲线像素坐标吗?更简单的方法是