import java.awt.*;
import java.awt.Color;
import java.awt.image.*;
import java.util.*;public class U01A1 extends Frame{

final int W=300;
final int H=200;
Image m_Img;
MemoryImageSource m_ImgScr;
int [] m_Pix=new int[W*H];

public U01A1(){
super("Color Line");
setSize(W,H);
for(int i=0;i<m_Pix.length;++i){
m_Pix[i]= 255<<0; // durchsichtig oder 0 setzen.
}
m_ImgScr=new MemoryImageSource(W,H,m_Pix,0,W);
m_Img=createImage(m_ImgScr);
setVisible(true);
getGraphics().drawImage(m_Img,0,0,this);
}
public void drawLine(int x1,int y1,int x2,int y2,Color color1,Color color2){
//y=mx+b
int col1=color1.getRGB();
int col2=color2.getRGB();

int dx=Math.abs(x2-x1);   
int dy=Math.abs(y2-y1);

// int m=dy/dx;
// int b=y1-((dy/dx)*x1);

if(dx>dy){
for(int i=0;i<dx;++i){
double dx1 = x2-x1;
                double dy1 = y2-y1;
//              System.out.println(dx1+" "+dy1);
             double i1 = dx1== dx?i:-i;
double gesucht = (i1/dx1)*dy1;   // ??????????
final int P = 100*i/dx;
m_Pix[x1 + y1*W + (int)i1 + (int)gesucht*W]=colorShuffle(col1,col2,P); 

}
}
else{
for(int i=0;i<dx;++i){
System.out.println("2.");
double dx1 = x2-x1;
                double dy1 = y2-y1;
//              System.out.println(dx1+" "+dy1);
             double i1 = dy1==dy?i:-i;
double gesucht = (i1/dy1)*dx1;
final int P = 100*i/dy;
m_Pix[x1 + y1*W + (int)i1 + (int)gesucht*W]=colorShuffle(col1,col2,P);

}
}
m_Img.flush();
getGraphics().drawImage(m_Img,0,0,this);
}
public void update(Graphics g) {}
public void paint(Graphics g) {
drawLine(100,150,50,100,Color.red,Color.black);
}

int singleShuffle(int i1_part, int i2_part, int p) {
return i1_part+(i2_part-i1_part)*p/100;
}
int colorShuffle(int i1, int i2, int p) {
int red = singleShuffle((i1 >> 16) & 255,(i2 >> 16) & 255,p);
int green = singleShuffle((i1 >> 8) & 255,(i2 >> 8) & 255,p);
int blue = singleShuffle((i1) & 255,(i2) & 255,p);
return (255 << 24) | (red << 16) | (green << 8) | blue;
}
public static void main(String[]args){
U01A1 u= new U01A1();
}
}
求解红色部分,从(x1,y1)到点 (x2,y2)画一条现,要求线的颜色为渐进色。 
红色部分没懂?? 请求达人指导, 谢谢大家 :)

解决方案 »

  1.   

            
            int dx=Math.abs(x2-x1);   
            int dy=Math.abs(y2-y1);
            
    //        int m=dy/dx;
    //        int b=y1-((dy/dx)*x1);
            
            if(dx>dy){
                for(int i=0;i<dx;++i){
                    double dx1 = x2-x1;
                       double dy1 = y2-y1;
    //              System.out.println(dx1+" "+dy1);
                    double i1 = dx1== dx?i:-i;
                    double gesucht = (i1/dx1)*dy1;   // ??????????
                    final int P = 100*i/dx;
                    m_Pix[x1 + y1*W + (int)i1 + (int)gesucht*W]=colorShuffle(col1,col2,P); 
                    
                }
            }
            else{
                for(int i=0;i<dx;++i){
                    System.out.println("2.");
                    double dx1 = x2-x1;
                       double dy1 = y2-y1;
    //              System.out.println(dx1+" "+dy1);
                    double i1 = dy1==dy?i:-i;
                    double gesucht = (i1/dy1)*dx1;
                    final int P = 100*i/dy;
                    m_Pix[x1 + y1*W + (int)i1 + (int)gesucht*W]=colorShuffle(col1,col2,P);

    是这一段吧?
      

  2.   

    谢谢楼上的,是这段,在java code里显示不出来