8-3 绘制随机图形 (10 分)

定义4个类,MyShape、MyLine、MyRectangle和MyOval,其中MyShape是其他三个类的父类。MyShape为抽象类,包括图形位置的四个坐标;一个无参的构造方法,将所有的坐标设置为0;一个带参的构造函数,将所有的坐标设置为相应值;每个坐标的设置和读取方法;abstract void draw(Graphics g)方法。MyLine类负责画直线,实现父类的draw方法;MyRectangle负责画矩形,实现父类的draw方法;MyOval负责画椭圆,实现父类的draw方法。编写一个应用程序,使用上面定义的类,随机选取位置和形状,绘制20个图形。示例输出如图所示。
在这里插入图片描述代码:

import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;
import java.util.Random;
abstract class MyShape{
   private double x1,y1,x2,y2;
   public MyShape(){
      x1=y1=x2=y2=0;
   }
   public MyShape(double a,double b,double c,double d){
      x1=a;y1=b;x2=c;y2=d;
   }
   //获取坐标方法
   public double getx1(){
      return x1;
   }
   public double getx2(){
      return x2;
   }
   public double gety1(){
      return y1;
   }
   public double gety2(){
      return y2;
   }
   //设置坐标方法
   public void setx1(double a){
      x1=a;
   }
   public void setx2(double a){
      x2=a;
   }
   public void sety1(double a){
      y1=a;
   }
   public void sety2(double a){
      y2=a;
   }
   //抽象方法draw
   abstract void draw(Graphics g);
}
class MyLine extends MyShape{
   public MyLine(double a,double b,double c,double d){
      super(a,b,c,d);
   }
   public void draw(Graphics g){
      Graphics2D g2 = (Graphics2D)g;
      Line2D xy=new Line2D.Double();
      xy.setLine(getx1(),gety1(),getx2(),gety2());
      g2.draw(xy);
   }
}
class MyRectangle extends MyShape{
   public MyRectangle(double a,double b,double c,double d){
      super(a,b,c,d);
   }
   public void draw(Graphics g){
      Graphics2D g2 = (Graphics2D)g;
      Rectangle2D xy=new Rectangle2D.Double();
      xy.setRect(getx1(), gety1(),Math.abs(getx2()-getx1()) ,Math.abs(gety2()-gety1()) );
      g2.draw(xy);
   }
   
}
class MyOval extends MyShape{
   public MyOval(double a,double b,double c,double d){
      super(a,b,c,d);
   }
   public void draw(Graphics g){
      Graphics2D g2 = (Graphics2D)g;
      Ellipse2D xy=new Ellipse2D.Double();
      xy.setFrame(getx1(), gety1(),Math.abs(getx2()-getx1()) ,Math.abs(gety2()-gety1()) );
      g2.draw(xy);
   }
   
}
class drawall extends JComponent{
   public void paintComponent(Graphics g){
      // super.paintComponent(g);
      MyShape rs;
      for(int i=1;i<=20;i++)     //画20个图形
      {
         Random nd=new Random();
         int op=nd.nextInt(3);       //0、1、2对应直线、矩形、椭圆
         // double x1=nd.nextDouble(600),y1=nd.nextDouble((Double)600.0),x2=nd.nextDouble((Double)600.0),y2=nd.nextDouble((Double)600.0);
         double x1 = Math.random() * 600 % 601;
         double y1 = Math.random() * 600 % 601;
         double x2 = Math.random() * 600 % 601;
         double y2 = Math.random() * 600 % 601;
         if(op==0){
            rs=new MyLine(x1,y1,x2,y2);
            rs.draw(g);
         }
         else if(op==1){
            rs=new MyRectangle(x1,y1,x2,y2);
            rs.draw(g);
         }
         else{
            rs=new MyOval(x1,y1,x2,y2);
            rs.draw(g);
         }
      }
   }
}
class mjf extends JFrame{
   public mjf(){
      add(new drawall());
      // pack();
   }
}
public class Main {
   public static void main(String[] args) {
      mjf jf=new mjf();
      jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      jf.setTitle("f(x)=x^2函数图像的绘制");
      jf.setVisible(true);
      jf.setSize(800,600);
   }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是一个使用 NetworkX 库绘制随机网络图形的示例代码: ```python import networkx as nx import matplotlib.pyplot as plt import random # 创建一个空的无向图 G = nx.Graph() # 添加随机节点 for i in range(10): G.add_node(i) # 添加随机边 for i in range(10): for j in range(i+1, 10): if random.random() < 0.5: G.add_edge(i, j) # 绘制图形 pos = nx.spring_layout(G) nx.draw(G, pos, with_labels=True) plt.show() ``` 在上面的示例代码中,我们首先创建了一个空的无向图 `G`,然后添加了 10 个随机节点,并使用 `random` 方法随机添加了一些边。最后,使用 `spring_layout` 方法对节点进行布局,并使用 `draw` 方法绘制图形。你可以根据需要调整节点数量、边的概率等参数,来生成不同的随机网络图形。 ### 回答2: Python中有许多库可以用来绘制随机网络图形,例如NetworkX和Matplotlib。下面是一个使用NetworkX和Matplotlib库绘制随机网络图形的示例: ```python import networkx as nx import matplotlib.pyplot as plt import random # 创建一个空的无向图 G = nx.Graph() # 添加随机节点 num_nodes = 10 for i in range(num_nodes): G.add_node(i) # 添加随机边 num_edges = 15 for i in range(num_edges): # 随机选择两个节点,并判断它们之间是否已经有边 # 若没有边则添加一条边 while True: node1 = random.choice(list(G.nodes)) node2 = random.choice(list(G.nodes)) if not G.has_edge(node1, node2): G.add_edge(node1, node2) break # 绘制网络图形 nx.draw(G, with_labels=True, node_color='lightblue', edge_color='gray') plt.show() ``` 在这个例子中,首先我们创建了一个空的无向图 `G`,然后通过循环添加了一些随机节点和随机边。然后,使用`nx.draw()`函数绘制了这个网络图形,并使用`with_labels=True`参数显示节点标签,`node_color='lightblue'`设置节点的颜色,`edge_color='gray'`设置边的颜色。最后使用`plt.show()`展示了这个图形。 运行这段代码,会生成一个随机的网络图形,其中节点和边都是随机生成的。 ### 回答3: Python是一种强大的编程语言,它具有广泛的应用领域,包括数据分析、人工智能和可视化等。其中,通过使用Python绘制随机网络图形是一项常见任务。 在Python中,可以使用多个第三方库来实现绘制随机网络图形的功能。其中,最常用的库是NetworkX。NetworkX是一个用于创建、操作和研究复杂网络的Python库。 首先,我们需要在开发环境中安装NetworkX库。在安装完成后,可以开始编写代码来创建随机网络图形。 首先,我们需要导入所需的库: ```python import networkx as nx import matplotlib.pyplot as plt import random ``` 然后,我们创建一个空的图形对象: ```python G = nx.Graph() ``` 接下来,我们可以生成节点和边。可以采用循环的方式来添加节点: ```python num_of_nodes = 10 for i in range(num_of_nodes): G.add_node(i) ``` 然后,我们可以使用循环生成随机的边: ```python num_of_edges = 15 for i in range(num_of_edges): random_node1 = random.choice(list(G.nodes())) random_node2 = random.choice(list(G.nodes())) if random_node1 != random_node2: G.add_edge(random_node1, random_node2) ``` 最后,我们可以使用Matplotlib库来绘制图形: ```python nx.draw_networkx(G) plt.show() ``` 以上就是使用Python绘制随机网络图形的示例代码。你可以根据实际需求进行调整和扩展,例如改变节点和边的数量,添加节点属性和边权重等。 总结起来,使用Python绘制随机网络图形是一项易于实现且功能强大的任务,通过使用NetworkX和Matplotlib等库,我们可以快速生成和可视化复杂的网络图形

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值