已经知道一个直线方程  y=ax+b,a=2,b=3;在坐标轴内画出这个方程的直线。
要求:坐标轴的范围是(300,300),画全这个范围内的直线,但不能超出这个范围。该如何画呢~~~~2点能够确定一条直线,可是如何才能让这个直线在(300,300)范围内画全且不超出呢? 望指教

解决方案 »

  1.   

    同意maquan('ma:kju)说的.
    把你的坐标映射到绘图区,找两点连就行了。yanhan0615(炮炮)说的是画直线的方法,JAVA提供函数了,没必要自己去做。
    另:他只考虑斜率小于1的情况,大于1时要从y轴循环
      

  2.   

    我的 先判断4个边界点,取里面2个正确点,然后连起来
    就是跟maquan('ma:kju)一个意思,但我总觉得这个方法是不是“笨”了一点,呵呵,见笑了。laziogo() 说的“yanhan0615(炮炮)说的是画直线的方法,JAVA提供函数了” 是哪个函数哦
      

  3.   

    逐点画??有没有搞错啊?
    JAVA的graphics提供两点一线的绘制方法了啊。楼主的问题其实是一个解析几何问题,就是分别求直线y=2x+3与四条直线x=0, y=0, x=300, y=300的交点,如果与x=0和y=0的交点有一点的x和y均落在区间[0,300]内,则认为该点是要画直线的起点,同样
    ,如果与x=300和y=300的交点有一点的x和y均落在区间[0,300]内,则认为该点是要画直线的终点。解方程得到起点坐标应为(0,5), 终点坐标为(300, 148.5),用Graphics.drawLine(0, 5, 300, 148.5)即可画得此线。
      

  4.   

    我是往右下方画的,改一下就可以
    public class Practice {

    Practice(){
    for(int i=0;i<301;i++){
    for(int j=0;j<301;j++){
    int a=2*i+3;
    if(a==j){
    System.out.print("*");
    }else{
    System.out.print(" ");
    }
    }
    System.out.println("");
    }
    }

    public static void main(String args[]){
    new Practice();
    }
    }
      

  5.   

    高中知识就行了
    //a=2,b=3;
    y在[0,300],因为y=ax+b 所以 x在[-b/a,(300-b)/a] ,假设a>0,小于0调换一下
    因为x也在[0,300],跟[-b/a,(300-b)/a]=[-1.5,148.5]  交集是[0,148.5]
    所以两个端点是(0,3)和(148.5,300)
    Graphics.drawLine(0, 3, 148.5 ,300)
      

  6.   

    用300范围效果看不太清楚,用30做的 
    public class Practice {

    Practice(){
    for(int i=0;i<31;i++){
    for(int j=31;j>0;j--){
    int a=2*i+3;
    if(a==j){
    System.out.print("*");
    }else{
    System.out.print(" ");
    }
    }
    System.out.println("");
    }
    }

    public static void main(String args[]){
    new Practice();
    }
    }
      

  7.   

    //----------------
    import java.awt.BasicStroke;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.RenderingHints;
    import java.awt.geom.Line2D;
    import java.awt.geom.Rectangle2D;
    import javax.swing.JPanel;public class MyPanel extends JPanel {
      public MyPanel() {
        this.setSize(400, 400);
      }  public void paint(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g2.setStroke(new BasicStroke(1.5f));
        g2.translate(50, 50);
        g2.draw(new Rectangle2D.Double(rect[0], rect[1], rect[2], rect[3]));
        double a = -2, b = 5;
        for (b = -400; b < 1000; b += 20) {
          double[] twox = getBewInter(new double[] { rect[0], rect[0] + rect[2] }, new double[] { (rect[1] - b) / a, (rect[1] + rect[3] - b) / a });
          if (twox != null)
            g2.draw(new Line2D.Double(twox[0], a * twox[0] + b, twox[1], a * twox[1] + b));
        }
      }  double[] getBewInter(double[] one, double two[]) {
        double[] f = { Math.min(one[0], one[1]), Math.max(one[0], one[1]) };
        double[] s = { Math.min(two[0], two[1]), Math.max(two[0], two[1]) };
        if (s[0] > f[1] || s[1] < f[0])
          return null;
        double[] ret = { (f[0] <= s[0] && s[0] <= f[1]) ? s[0] : f[0], (f[0] <= s[1] && s[1] <= f[1]) ? s[1] : f[1] };
        return ret;
      }  double rect[] = { 0, 0, 300, 300 };
    }
    图像剪切好象用得着这类算法,不过过于复杂了,最好是采用覆盖的方式,把300*300的外边用底色覆盖来得方便。
      

  8.   

    先谢谢大家~~
    如果用:求直线y=2x+3与四条直线x=0, y=0, x=300, y=300的交点,如果与x=0和y=0的交点有一点的x和y均落在区间[0,300]内,则认为该点是要画直线的起点,同样
    ,如果与x=300和y=300的交点有一点的x和y均落在区间[0,300]内,则认为该点是要画直线的终点。  
    这个方法的话是否没有考虑  如果与x=0和y=0的交点都没有落在区间[0,300]内的情况呢?