Advertisement
Guest User

Untitled

a guest
Oct 25th, 2016
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.22 KB | None | 0 0
  1.     private void drawIsolines() {
  2.         double scaleW = (double)SIZE_W/(double)model.N;
  3.         double scaleH = (double)SIZE_H/(double)model.M;
  4.  
  5.         for(int n = 0; n<model.N;n++){
  6.             for (int m = 0; m<model.M;m++){
  7.                 int x1 = (int)(scaleW*(double)n+0.5);
  8.                 int x2 = (int)(scaleW*(double)(n+1)+0.5);
  9.                 int y1 = (int)(scaleH*(double)m+0.5);
  10.                 int y2 = (int)(scaleH*(double)(m+1)+0.5);
  11.                 drawIsolinesAt(new Point(x1,y2),
  12.                         new Point(x2,y2),
  13.                         new Point (x1,y1),
  14.                         new Point (x2,y1));
  15.             }
  16.         }
  17.     }
  18.  
  19.     public void drawIsolinesAt(Point p1,
  20.                                Point p2,
  21.                                Point p3,
  22.                                Point p4) {
  23.         double z = model.IsVal;
  24.  
  25.         drawIsolinesAt(p1,p2,p3,p4,z);
  26.     }
  27.  
  28.     public void drawIsolinesAt(Point p1,
  29.                                Point p2,
  30.                                Point p3,
  31.                                Point p4,
  32.                                double z){
  33.  
  34.         Point topP = getPoint(p1,p2,z);
  35.         Point rightP = getPoint(p2,p4,z);
  36.         Point botP = getPoint(p4,p3,z);
  37.         Point leftP = getPoint(p3,p1,z);
  38.  
  39.         ArrayList<Point> points = new ArrayList<>();
  40.         if(topP!=null)points.add(topP);
  41.         if(rightP!=null)points.add(rightP);
  42.         if(botP!=null)points.add(botP);
  43.         if(leftP!=null)points.add(leftP);
  44.  
  45.         if(points.size() == 2){
  46.             drawLine(points.get(0),points.get(1));
  47.         }
  48.         if(points.size() == 4){
  49.             Point midPoint = new Point( (p2.x+p3.x)/2,(p2.y+p3.y)/2);
  50.             double midVal = model.getFuncValFor(midPoint)-z;
  51.             double val1 = model.getFuncValFor(p1)-z;
  52.             double val2 = model.getFuncValFor(p2)-z;
  53.             if(val1*midVal<0) {
  54.                 drawLine(topP, leftP);
  55.                 drawLine(botP, rightP);
  56.             }
  57.             if(val2*midVal<0){
  58.                 drawLine(topP,rightP);
  59.                 drawLine(botP,leftP);
  60.             }
  61.         }
  62.     }
  63.  
  64.     private void drawLine(Point p1, Point p2){
  65.         Graphics g = canvas.getGraphics();
  66.         Color tmpCol = g.getColor();
  67.         g.setColor(new Color(model.IsColor));
  68.         g.drawLine(p1.x,p1.y,p2.x,p2.y);
  69.         g.setColor(tmpCol);
  70.     }
  71.  
  72.  
  73.     private Point getPoint(Point p1, Point p2, double z) {
  74.         double f1 = model.getFuncValFor(p1);
  75.         double f2 = model.getFuncValFor(p2);
  76.         if((f1 < z && z < f2 )|| (f2 < z && z < f1)){
  77.             double dx = -(p1.x - p2.x);
  78.             double dy = -(p1.y - p2.y);
  79.             int x = (int)(p1.x + dx*(z-f1)/(f2-f1));
  80.             int y = (int)(p1.y + dy*(z-f1)/(f2-f1));
  81.  
  82.             return new Point(x,y);
  83.         }else{
  84.             return null;
  85.         }
  86.  
  87.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement