• 大小: 6KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-10
  • 语言: 其他
  • 标签:

资源简介

1.椭圆的扫描转换算法 2.凸六边形的扫描线填充算法 3.凸六边形绕点旋转算法 4.给定特征多边形,生成贝塞尔(Bezier)曲线

资源截图

代码片段和文件信息

package Work;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Line2D;
import java.awt.geom.Point2D;

import javax.swing.JComponent;
import javax.swing.Jframe;
import javax.swing.JLabel;
import javax.swing.JPanel;


public class Bezier {

public static void main(String[] args) {
// TODO Auto-generated method stub
Drawframe3 Jf = new Drawframe3();
Jf.setVisible(true);
Jf.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);
}
}

class Drawframe3 extends Jframe
{
public Drawframe3()
{
this.settitle(“坐标系框架“);
this.setSize(800600);
this.setLocationRelativeTo(null);
this.setResizable(false);

DrawPanel3 Jp = new DrawPanel3();
this.add(Jp);
}
}

class DrawPanel3 extends JComponent
{

private int width height;
private int x0 y0;
private Point2D [] p = new Point2D [6];
private Point2D [] temp = new Point2D [6];
public DrawPanel3()
{

p[0] = new Point2D.Double(496  286);
p[1] = new Point2D.Double(646  286);
p[2] = new Point2D.Double(726  186);
p[3] = new Point2D.Double(646  86);
p[4] = new Point2D.Double(496  86);
p[5] = new Point2D.Double(416  186);


}
public void paintComponent(Graphics g)
{
//super.paintComponent(g);
setBackground(Color.BLACK);

width = this.getWidth();
height = this.getHeight();
x0 = width/2;
y0 = height/2;

System.out.println(“sghoisugh“);
//this.DrawSix(g);
//this.PaAxis(g);
this.DrawBezier(g);
}
public void DrawBezier(Graphics g1)
{
Graphics2D g = (Graphics2D)g1;
g.setPaint(Color.BLUE);
Point2D t1t2;
t1 = p[0];
/**
 * 利用递归的算法来画图
 * 其中利用到了Point2D中的2D图形来结合Line2D来划线
 * 根据t的渐变   结合两个点来描线可以得到相应的贝塞尔曲线
 * 递归的函数体是   (手写不出来)
 */

temp = p;
for(double t = 0.01; t <= 1.0; t +=0.01)
{
temp = p;
for(int n = 5; n >= 1; n--)
{
for(int i = 0; i < n; i++)
temp[i] =new Point2D.Double(((1-t)*temp[i].getX() + t*temp[i+1].getX())((1-t)*temp[i].getY() + t*temp[i+1].getY()));
//显示中间直线轨迹
//for(int i = 0; i < n-1; i++)
//g.draw(new Line2D.Double(temp[i]temp[i+1]));
}

t2 = temp[0];
g.setPaint(Color.BLUE);
g.draw(new Line2D.Double(t1t2));
t1 = t2;
}

}
public void DrawSix(Graphics g1)
{
Graphics2D g = (Graphics2D)g1;

g.setPaint(Color.RED);
for(int i = 0; i < 5; i++)
{
g.draw(new Line2D.Double(p[i] p[i+1]));
}
}
public void  PaAxis(Graphics g)
{
g.setColor(Color.GREEN);
//坐标轴线
g.drawLine(0 y0 width y0);
g.drawLine(x0 0 x0 height);
//g.drawLine(x0+10 0 x0+10 height);
//刻度线
g.drawString(“0“ x0 + 8 y0+15);//绘制0刻度
for(int i = 10; i <= 1.5*y0; i +=10)
{
if(i %50 == 0)
{
//x轴的绘制
g.drawLine(x0 + i y0 - 10 x0 + i y0);//x轴正向|10|代表刻度的高度
g.drawString(String.valueOf(i) x0+i-5 y0+15);//绘制刻度尺下面的数字
g.drawLine(x0 - i y0 - 10 x0 - i y0);//x轴负向|10|代

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        4244  2015-11-11 17:11  Work\Bezier.java
     文件        3466  2015-11-08 18:20  Work\Ellipse.java
     文件        3646  2015-11-07 21:09  Work\Filling.java
     文件        3789  2015-11-07 23:22  Work\Revolve.java
     文件          67  2015-10-29 13:15  Work\package-info.java
     目录           0  2015-11-07 21:11  Work\

评论

共有 条评论