/**
* This file is part of OSM2ShareNav
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as published by
* the Free Software Foundation.
*
* Copyright (C) 2010 Harald Mueller
*/
package net.sharenav.osmToShareNav.area;
import net.sharenav.osmToShareNav.model.Bounds;
import net.sharenav.osmToShareNav.model.Node;
public class Vertex {
// private float lat;
// private float lon;
// private long id;
private Vertex next;
private Vertex prev;
private Outline outline;
private final Node node;
public Vertex(float node_lat, float node_lon, long id,Outline outline) {
node=new Node(node_lat,node_lon,id);
this.outline=outline;
}
public Vertex(float node_lat, float node_lon, long id) {
node=new Node(node_lat,node_lon,id);
}
public Vertex(Node n,Outline outline) {
node =n;
this.outline=outline;
}
public Node getNode(){
return node;
}
public void setOutline(Outline o){
outline=o;
}
public Outline getOutline(){
return outline;
}
public float getLat() {
return node.lat;
}
public void setLat(float lat) {
node.lat = lat;
}
public float getLon() {
return node.lon;
}
public float getX() {
return node.lat;
}
public float getY() {
return node.lon;
}
public void setLon(float lon) {
node.lon = lon;
}
public long getId() {
return node.id;
}
public void setId(long id) {
node.id = id;
}
public Vertex getNext() {
return next;
}
public void setNext(Vertex next) {
this.next = next;
}
public Vertex getPrev() {
return prev;
}
public void setPrev(Vertex prev) {
this.prev = prev;
}
public float cross(float lat,float lon){
return node.lat*lon-node.lon*lat;
}
public float cross(Vertex other){
return node.lat*other.getLon()-other.getLat()*node.lon;
}
public boolean partOf(Outline o){
return (outline == o);
}
public Vertex minus(Vertex other){
return new Vertex(node.lat-other.getLat(),node.lon-other.getLon(),node.id,null);
}
//
// public float mult(Node other){
// return lat*other.getLat() + lon*other.getLon();
// }
//
// public float module(Node other){
// return (float) Math.sqrt(this.mult(this));
// }
public String toString() {
return String.format(" %d(%1.2f/%1.2f)%d ", node.id,node.lat,node.lon,node.renumberdId);
}
protected Vertex clone() {
return new Vertex(node,outline);
}
/**
* @param bound
*/
public void extendBounds(Bounds bound) {
bound.extend(node.lat, node.lon);
}
@Override
public boolean equals(Object obj) {
Vertex other=(Vertex)obj;
if (getX() == other.getX() &&
getY() == other.getY()){
return true;
} else {
return false;
}
}
public float getSideOfVector(Vertex v1, Vertex v2) {
float lat12 = v1.getLat() - v2.getLat();
float lon12 = v1.getLon() - v2.getLon();
float latn2 = getLat() - v2.getLat();
float lonn2 = getLon() - v2.getLon();
return lat12 * lonn2 - lon12 * latn2;
}
}