Generate a polygon from line

I want to draw a line with thickness in j2me. This can easily be achieved in desktop java by setting Pen width as thickness value. However in j2me, Pen class does not support width. My idea is to generate a polygon from the line I have, that resembles the line with thickness i want to draw. In picture, on the left is what I have, a line with points. On the right is what I want, a polygon that when filled, a line with thickness. Could anyone know how to generate a polygon from line?

alt text http://www.freeimagehosting.net/uploads/140e43c2d2.gif


Ah, if you're preprocessing, that should make your life easier. Here's a little code I whipped up using Graphics2D (using J2SE). I don't like that the output includes extra interior segments, but when it's filled, it looks pretty good.

import java.awt.BasicStroke;
import java.awt.Shape;
import java.awt.geom.Path2D;
import java.awt.geom.PathIterator;

public class StrokePath
{
    public static void main(String[] args)
    {
        // set line width to 6, use bevel for line joins
        BasicStroke bs = new BasicStroke(6.0f, BasicStroke.CAP_SQUARE, BasicStroke.JOIN_BEVEL);

        // create a path for the input
        Path2D p = new Path2D.Float();
        p.moveTo(50.0, 50.0);
        p.lineTo(65.0, 100.0);
        p.lineTo(70.0, 60.0);
        p.lineTo(120.0, 65.0);
        p.lineTo(40.0, 200.0);

        // create outline of wide lines by stroking the path with the stroke
        Shape s = bs.createStrokedShape(p);
        // output each of the segments of the stroked path for the output polygon
        PathIterator pi = s.getPathIterator(null);
        while (!pi.isDone())
        {
            pi.next();
            double[] coords = new double[6];
            int type = pi.currentSegment(coords);
            switch (type)
            {
            case PathIterator.SEG_LINETO:
                System.out.println(String.format("SEG_LINETO %f,%f", coords[0], coords[1]));
                break;
            case PathIterator.SEG_CLOSE:
                System.out.println("SEG_CLOSE");
                break;
            case PathIterator.SEG_MOVETO:
                System.out.println(String.format("SEG_MOVETO %f,%f", coords[0], coords[1]));
                break;
            default:
                System.out.println("*** More complicated than LINETO... Maybe should use FlatteningPathIterator? ***");
                break;
            }
        }
    }
}

Here are my results after rendering these coordinates:


This will draw a line:

Graphics g = this.CreateGraphics();
Pen pen = new Pen(Color.Black, 2); //black Width 2
pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Solid;
g.DrawLine(pen, point1, point2); //point1 and point2 are instances of Point class

So i guess if you have an array of points you could do something like

for(int i=0;i<myPoints.Length-1;i++)
g.DrawLine(pen,myPoints[i],myPoints[i+1]); 

question is not very clear... hope this helps


I guess I'll draw parallel lines beside the line and connect them as a polygon. Than fill. To draw a parallel line, Draw a parallel line.

链接地址: http://www.djcxy.com/p/45770.html

上一篇: 我如何在LaTeX Lab中为我的LaTeX文档使用自定义编译器?

下一篇: 从行生成多边形