Em lập trình vẽ đường thẳng theo thuật toán midpoint! Với các góc m>1 và 0<m<1 thì ổn nhưng với các góc khác thì không được tẹo nào! Mọi người giúp em với!! Sau đây là code của em!
C++ Code:
  1. /**
  2.  * @(#)vedt4.java
  3.  *
  4.  *
  5.  * @author
  6.  * @version 1.00 2012/4/19
  7.  */
  8.  
  9.  
  10. import javax.swing.JPanel;
  11. import java.awt.*;
  12. import java.awt.event.*;
  13. import java.awt.Graphics;
  14. import javax.swing.JFrame;
  15.  
  16. public class vedt4 extends javax.swing.JFrame //implements MouseListener, MouseMotionListener
  17. {
  18.  
  19.     public vedt4() {
  20.     }
  21.    
  22.     public static void main(String args[]) throws Exception
  23.     {
  24.         JFrame f = new JFrame("Draw a Red Line");
  25.         f.setSize(300, 300);
  26.         f.setLocation(300, 300);
  27.         f.setResizable(false);
  28.         JPanel p = new JPanel()
  29.         {
  30.             Point pointStart = null;
  31.             Point pointEnd   = null;
  32.             {
  33.                 addMouseListener(new MouseAdapter()
  34.                 {
  35.                     public void mousePressed(MouseEvent e)
  36.                     {
  37.                         pointStart = e.getPoint();
  38.                     }
  39.    
  40.                     public void mouseReleased(MouseEvent e)
  41.                     {
  42.                         pointStart = null;
  43.                     }
  44.                
  45.                 });
  46.                 addMouseMotionListener(new MouseMotionAdapter()
  47.                 {
  48.                     public void mouseMoved(MouseEvent e)
  49.                     {
  50.                         pointEnd = e.getPoint();
  51.                     }
  52.    
  53.                     public void mouseDragged(MouseEvent e)
  54.                     {
  55.                         pointEnd = e.getPoint();
  56.                         repaint();
  57.                     }
  58.                    
  59.                 });
  60.             }
  61.             public void paint(Graphics g)
  62.             {
  63.                 super.paint(g);
  64.                 if (pointStart != null)
  65.                 {
  66.                     g.setColor(Color.RED);
  67.                     //g.drawLine(pointStart.x, pointStart.y, pointEnd.x, pointEnd.y);
  68.                     int x1 = pointStart.x;
  69.                     int y1 = pointStart.y;
  70.                     int x2 = pointEnd.x;
  71.                     int y2 = pointEnd.y;
  72.                    
  73.                
  74.                     int A;
  75.                     int B;
  76.                
  77.                     int p;
  78.                    
  79.                    
  80.                     if(x1 == x2)
  81.                     {
  82.                         if(y1 <= y2)
  83.                             for (int i = y1; i < y2; i++)
  84.                                  g.drawLine(x1, i, x2, i);
  85.                         else
  86.                           for(int i = y2; i < y1; i++)
  87.                               g.drawLine(x1, i, x2, i);
  88.                     }
  89.                     else
  90.                     {
  91.                         if(y1 == y2)
  92.                       {
  93.                           if(x1 <= x2)
  94.                           {
  95.                               for(int i = x1; i < x2; i++)
  96.                                   g.drawLine(i, y1, i, y2);
  97.                           }
  98.                           else
  99.                               for(int i = x2; i < x1; i++)
  100.                                   g.drawLine(i, y1, i, y2);
  101.                       }
  102.                       else
  103.                       {
  104.                         if(x1 > x2)
  105.                         {
  106.                             int tmpx = x1;
  107.                             x1 = x2;
  108.                             x2 = tmpx;
  109.                             int tmpy = y1;
  110.                             y1 = y2;
  111.                             y2 = tmpy;
  112.                         }
  113.                         A = y2 - y1;
  114.                         B = -(x2 - x1);
  115.                         p = A + B/2;
  116.                         float m = (float) (y2 - y1)/(x2 - x1);
  117.                         int x,y;
  118.                         if(0< m && 1>= m)
  119.                         {
  120.                             x = x1;
  121.                             y = y1;
  122.                            
  123.                             while(x <= x2)
  124.                             {
  125.                                 if(p < 0)
  126.                                 {
  127.                                     p = p + A;
  128.                                 }
  129.                                 else
  130.                                 {
  131.                                     p = p + A + B;
  132.                                     y++;
  133.                                 }
  134.                                 g.drawLine(x, y, x, y);
  135.                                 x++;
  136.                             }
  137.                         }
  138.                         else
  139.                         {
  140.                             if(m>1)
  141.                             {
  142.                                 int tmp = x1;x1=y1;y1=tmp;  
  143.                                     tmp = x2;x2=y2;y2=tmp;
  144.                                  A = y2 - y1;
  145.                                  B = - (x2 - x1);
  146.                                  p = A + B/2;
  147.                                
  148.                                 if(x1 > x2)
  149.                                 {
  150.                                     tmp = x1;
  151.                                     x1 = x2;
  152.                                     x2 = tmp;
  153.                                     tmp = y1;
  154.                                     y1 = y2;
  155.                                     y2 = tmp;
  156.                                 }
  157.                                 y = y1;
  158.                                 x = x1;
  159.                                
  160.                                 while(x <= x2)
  161.                                 {
  162.                                     if(p < 0)
  163.                                     {
  164.                                         p = p + A;
  165.                                     }
  166.                                     else
  167.                                     {
  168.                                         p = p + A + B;
  169.                                         y++;
  170.                                     }
  171.                                     g.drawLine(y, x, y, x);
  172.                                     x++;
  173.                                    
  174.                                 }
  175.                             }
  176.                             /*else
  177.                             {
  178.                                 if(0 > m && m >= -1)
  179.                                 {
  180.                                     y = y1;
  181.                                     x = x1;
  182.                                    
  183.                                     while(x <= x2)
  184.                                     {
  185.                                         if(p < 0)
  186.                                         {
  187.                                             p = p + A;
  188.                                         }
  189.                                         else
  190.                                         {
  191.                                             p = p + A + B;
  192.                                             y--;
  193.                                         }
  194.                                         g.drawLine(x, y, x, y);
  195.                                         x++;
  196.                                        
  197.                                     }
  198.                                 }
  199.                                 else
  200.                            
  201.                                 {
  202.                                     if(m<-1)
  203.                                     {
  204.                                         int tmp = x1;
  205.                                         x1 = y1;
  206.                                         y1 = tmp;
  207.                                         tmp = x2;
  208.                                         x2 = y2;
  209.                                         y2 = tmp;
  210.                                         A = y2 - y1;
  211.                                         B = -(x2 - x1);
  212.                                         p = A + B/2;
  213.                                         if(x1 > x2)
  214.                                         {
  215.                                             tmp = x1;
  216.                                             x1 = x2;
  217.                                             x2 = tmp;
  218.                                             tmp = y1;
  219.                                             y1 = y2;
  220.                                             y2 = tmp;
  221.                                         }
  222.                                        
  223.                                         y = y1;
  224.                                         x = x1;
  225.                                        
  226.                                         while(x <= x2)
  227.                                         {
  228.                                             if(p < 0)
  229.                                             {
  230.                                                 p = p + A;
  231.                                             }
  232.                                             else
  233.                                             {
  234.                                                 p = p + A + B;
  235.                                                 y--;
  236.                                             }
  237.                                             g.drawLine(y, x, y, x);
  238.                                             x++;
  239.                                            
  240.                                         }
  241.                                     }
  242.                                 }
  243.                             }*/
  244.                         }                      
  245.                     }
  246.                 }
  247.             }
  248.             }
  249.         };
  250.    
  251.     f.add(p);
  252.     f.setVisible(true);
  253. }
  254.    
  255. }

Phần em đánh dấu là phần đó bị lỗi đấy ạ, Em không biết phải sửa làm sao cho đúng cả! Mong anh chị giúp em với ạ!