package com.example.usb.map; import android.graphics.Color; import android.graphics.Canvas; import android.graphics.Paint; import android.view.SurfaceView; import com.example.usb.Drawer; import com.example.usb.map.graphelems.ElevationNode; import com.example.usb.map.graphelems.Node; import java.util.ArrayList; /** * Class used to draw on the surface view containing the map canvas * * @author Miles Nelson */ public class MapDrawer { //changes the thickness of the line private int pathThickness = 6; private Paint red = new Paint(); private float curRotate; // Places two nodes on a map and draws a line between them public void place(ArrayList nodes, Canvas canvas, SurfaceView surface){ red.setColor(Color.RED); for(int currentNode = 0 ; currentNode < nodes.size() - 1; currentNode++){ float[] center = findCenter(nodes.get(currentNode).getXPos(), nodes.get(currentNode).getYPos(), nodes.get(currentNode+1).getXPos(),nodes.get(currentNode+1).getYPos()); curRotate = rotation(nodes.get(currentNode).getXPos(), nodes.get(currentNode).getYPos(), nodes.get(currentNode+1).getXPos(),nodes.get(currentNode+1).getYPos()); canvas.rotate(curRotate, center[0], center[1]); canvas.drawRect(center[0]-(pathThickness/2),center[1]-(center[2]/2),center[0]+(pathThickness/2),center[1]+(center[2]/2), red); canvas.rotate(-curRotate, center[0], center[1]); canvas.drawCircle(nodes.get(currentNode).getXPos(), nodes.get(currentNode).getYPos(),10, new Paint()); canvas.drawCircle(nodes.get(currentNode+1).getXPos(),nodes.get(currentNode+1).getYPos(),10, new Paint()); } } public float rotation(float x1, float y1, float x2, float y2){ float difX = (x1-x2); float difY = (y1-y2); <<<<<<< HEAD if(difX == 0 && difY == 0){ return 0; } ======= if (difX == 0 && difY == 0){ return 0; } >>>>>>> 7dfedf4b18e1efe0bdaaf9a14116265324769e07 return (float)(180-Math.toDegrees(Math.atan(difX/difY))); } public float[] findCenter(float x1, float y1, float x2, float y2){ float midX; float midY; float length; midX = (x1+x2)/2; midY = (y1+y2)/2; length = (float) Math.sqrt(Math.abs((x1-x2)*(x1-x2))+Math.abs((y1-y2)*(y1-y2))); return new float[]{midX, midY, length}; } }