Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private void drawIsolines() {
- double scaleW = (double)SIZE_W/(double)model.N;
- double scaleH = (double)SIZE_H/(double)model.M;
- for(int n = 0; n<model.N;n++){
- for (int m = 0; m<model.M;m++){
- int x1 = (int)(scaleW*(double)n+0.5);
- int x2 = (int)(scaleW*(double)(n+1)+0.5);
- int y1 = (int)(scaleH*(double)m+0.5);
- int y2 = (int)(scaleH*(double)(m+1)+0.5);
- drawIsolinesAt(new Point(x1,y2),
- new Point(x2,y2),
- new Point (x1,y1),
- new Point (x2,y1));
- }
- }
- }
- public void drawIsolinesAt(Point p1,
- Point p2,
- Point p3,
- Point p4) {
- double z = model.IsVal;
- drawIsolinesAt(p1,p2,p3,p4,z);
- }
- public void drawIsolinesAt(Point p1,
- Point p2,
- Point p3,
- Point p4,
- double z){
- Point topP = getPoint(p1,p2,z);
- Point rightP = getPoint(p2,p4,z);
- Point botP = getPoint(p4,p3,z);
- Point leftP = getPoint(p3,p1,z);
- ArrayList<Point> points = new ArrayList<>();
- if(topP!=null)points.add(topP);
- if(rightP!=null)points.add(rightP);
- if(botP!=null)points.add(botP);
- if(leftP!=null)points.add(leftP);
- if(points.size() == 2){
- drawLine(points.get(0),points.get(1));
- }
- if(points.size() == 4){
- Point midPoint = new Point( (p2.x+p3.x)/2,(p2.y+p3.y)/2);
- double midVal = model.getFuncValFor(midPoint)-z;
- double val1 = model.getFuncValFor(p1)-z;
- double val2 = model.getFuncValFor(p2)-z;
- if(val1*midVal<0) {
- drawLine(topP, leftP);
- drawLine(botP, rightP);
- }
- if(val2*midVal<0){
- drawLine(topP,rightP);
- drawLine(botP,leftP);
- }
- }
- }
- private void drawLine(Point p1, Point p2){
- Graphics g = canvas.getGraphics();
- Color tmpCol = g.getColor();
- g.setColor(new Color(model.IsColor));
- g.drawLine(p1.x,p1.y,p2.x,p2.y);
- g.setColor(tmpCol);
- }
- private Point getPoint(Point p1, Point p2, double z) {
- double f1 = model.getFuncValFor(p1);
- double f2 = model.getFuncValFor(p2);
- if((f1 < z && z < f2 )|| (f2 < z && z < f1)){
- double dx = -(p1.x - p2.x);
- double dy = -(p1.y - p2.y);
- int x = (int)(p1.x + dx*(z-f1)/(f2-f1));
- int y = (int)(p1.y + dy*(z-f1)/(f2-f1));
- return new Point(x,y);
- }else{
- return null;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement