开源下自己写的一个45度坐标系数据转换工具类
/**
*45度坐标系数据转换工具类
* code wxsr
*/
package com.engine.data.referenceFrame45
{
import flash.geom.Point;
public class Rectangle45 //implements IRectangle45
{
public static var ARI_MODE:Boolean=false
public static const anglex:Number=Math.asin(1/Math.sqrt(5))*(180/Math.PI)
private static const angley:Number=Math.asin(2/Math.sqrt(5))*(180/Math.PI)
public static const sideFirst:Point=new Point(1,1)
public static const sideSecond:Point=new Point(-1,1)
public static const sideThird:Point=new Point(-1,-1)
public static const sideFour:Point=new Point(1,-1)
/**
*角度转弧度
* @param angle
* @return
*
*/
public static function angleToradian(angle:Number):Number
{
return angle*180/Math.PI*angle;
}
/**
* 弧度转角度
* @param radian
* @return
*
*/
public static function radianToangle(radian:Number):Number
{
return radian*Math.PI/180*radian
}
/**
*获取x单位45度移动增量
* @param targetPoint 目标坐标
* @param leftVertex 新开始点
* @param origin 原点
* @return
*
*/
public static function vx(targetPoint:Point, cell:CellGird45):Number
{
var pox:Number=(targetPoint.x+cell.leftVertex.x)/2 - (targetPoint.y-cell.leftVertex.y)-cell.origin.x;
return pox;
}
/**
* 获取y单位45度移动增量
* @param targetPoint
* @param leftVertex
* @param origin
* @return
*
*/
public static function vy(targetPoint:Point, cell:CellGird45):Number
{
var poy:Number=(targetPoint.x+cell.leftVertex.x)/2 + (targetPoint.y-cell.leftVertex.y)-cell.origin.x;
return poy;
}
/**
*获取直角坐标某点的x45度坐标
* @param targetPoint
* @param newLeftVertex
* @return
*
*/
public static function x45(targetPoint:Point, cell:CellGird45):Point
{
var poX:Number=vx(targetPoint,cell)
return new Point(cell.leftVertex.x+poX,cell.leftVertex.y-poX*.5)
}
/**
* 获取直角坐标某点的y45度坐标
* @param targetPoint
* @param newLeftVertex
* @return
*
*/
public static function y45(targetPoint:Point, cell:CellGird45):Point
{
var poY:Number=vy(targetPoint,cell)
return new Point(cell.leftVertex.x+poY,cell.leftVertex.y+poY*.5)
}
/**
*将直角坐标系的一点转换为45度坐标系 对应点
* @param targetPoint
* @param newLeftVertex
* @return
*
*/
public static function xy45(targetPoint:Point, cell:CellGird45):Point
{
var poX:Point=x45(targetPoint,cell)
var poY:Point=y45(targetPoint,cell)
var x:Number=poX.x+poY.x-cell.leftVertex.x;
var y:Number=poX.y+poY.y-cell.leftVertex.y;
return new Point(x,y)
}
/**
*获取棋盘整型坐标
* @param point
* @return
*
*/
public static function getIndex(point:Point,cell:CellGird45):Point
{
point==null?point=new Point:''
var pox:Number= Math.floor((point.x-cell.leftVertex.x)/cell.cellWidth - (point.y-cell.leftVertex.y)/cell.cellHeight);
var poy:Number=Math.floor((point.x-cell.leftVertex.x)/cell.cellWidth + (point.y-cell.leftVertex.y)/cell.cellHeight);
return new Point(pox,poy)
}
/**
*将45度坐标转换为直角坐标系
* @param point
* @return
*
*/
public static function local45ToGlobal(point:Point,cell:CellGird45):Point
{
var size:Number=cell.cellHeight;
var pox:Number=cell.leftVertex.x+size*(point.x+point.y);
var poy:Number=cell.leftVertex.y+size/2*(point.y-point.x);
return new Point(pox,poy)
}
;
public static function symmetryChange(oldSide:Point,newSide:Point,camerPoint:Point,oblPoint:Point):Point
{
var dirX:int=newSide.x-oldSide.x
var dirY:int=newSide.y-oldSide.y
if(dirX!=0)
{
dirX>0?dirX=1:dirX=-1
}
if(dirY!=0)
{
dirY>0?dirY=1:dirY=-1
}
var disx:int=(oblPoint.x-camerPoint.x)*dirX;
var disy:int=(oblPoint.y-camerPoint.y)*dirY;
var newPoint:Point=new Point(oblPoint.x+disx*2,oblPoint.y+disy*2)
return newPoint
}
/**
*
* @param point
* @param cell
* @param isReverse
* @return
*
*/
public static function fitPoint(point:Point,cell:CellGird45,isReverse:Boolean=false):Point
{
var newPoint:Point
if(isReverse){
newPoint=local45ToGlobal(getIndex(point,cell),cell)
return getIndex(newPoint,cell)
}
newPoint=getIndex(point,cell)
return local45ToGlobal(newPoint,cell)
}
/**
*平面90度旋转转换
* @param camerPoint
* @param oldPoint
* @param cell
* @param dir
* @return
*
*/
public static function rotationChange2(camerPoint:Point,oldPoint:Point,cell:CellGird45,dir:int=-1):Point
{
if(!Rectangle45.ARI_MODE)camerPoint=new Point;
//var radian:Array=[dir*Math.PI*.5,Math.PI,3*Math.PI/2,2*Math.PI]
var x:Number=oldPoint.x-camerPoint.x;
var y:Number=oldPoint.y-camerPoint.y
var radius:Number=Math.sqrt(x*x+y*y)
var angle2:Number=Math.atan2(x,y)
var u:Number=Math.round(camerPoint.x+Math.sin(dir*Math.PI*.5+angle2) * radius);
var v:Number=Math.round(camerPoint.y+Math.cos(dir*Math.PI*.5+angle2) * radius)
var point:Point=new Point( u,v);
return point
}
}
}
/**
*45度坐标系
* 45度转换单位
* code wxsr
*/
package com.engine.data.referenceFrame45
{
import flash.geom.Point;
import flash.net.registerClassAlias;
public class CellGird45
{
private var _anglex:Number=Math.asin(1/Math.sqrt(5))
private var _angley:Number=Math.asin(2/Math.sqrt(5))
private var _origin:Point;
private var _leftVertex:Point;
private var _topVertex:Point
private var _rightVertex:Point;
private var _bottonVertex:Point;
private var _midpoint:Point;
private var _cellSize:Number
private var _cellWidth:Number
private var _cellHeigth:Number;
private var _key:String;
private var _keyPoint:Point
private var _type:uint=1
private var _color:uint=0xffff00;
private var _lock:Boolean;
public var source:String;
//信息所属的元件id
public var imgKey:String
public function CellGird45(cellSize:Number=25,originPoint:Point=null)
{
registerClassAlias("com.save.cellGird45",CellGird45)
registerClassAlias("com.save.point",Point)
this.cellSize=cellSize
if(originPoint==null)
{
this.origin=new Point()
}else {
this.origin=originPoint;
}
}
/**
* 是否不可设置
* @return
*
*/
public function get lock():Boolean
{
return this._lock
}
public function set lock(val:Boolean):void
{
this._lock=val
}
/**
* 类型
* @return
*
*/
public function get type():uint
{
return this._type
}
public function set type(val:uint):void
{
this._type=val
}
/**
* 颜色
* @return
*
*/
public function get color():uint
{
return this._color
}
public function set color(val:uint):void
{
this._color=val
}
/**
* 注册点
* @param point
*
*/
public function set origin(point:Point):void
{
this._origin=point;
var x:Number=this._origin.x;
var y:Number=this._origin.y;
var size:Number=this._cellHeigth
size=24
this._leftVertex=new Point(x,y+size/2)
this._topVertex=new Point(x+size,y)
this._rightVertex=new Point(x+size*2,y+size/2)
this._bottonVertex=new Point(x+size,y+size)
this._midpoint=new Point(x+size,y+size/2)
}
/**
* 单元格大小
* @param val
*
*/
public function set cellSize(val :Number):void
{
this._cellWidth=(val*this._angley*2);
this._cellHeigth=(this._cellWidth/2)
this._cellSize=val
}
/**
* 单元格宽度
* @param val
*
*/
public function set cellWidth (val:Number):void
{
this._cellWidth=(val);
this._cellHeigth=val/2
this._cellSize=val/this._angley*.5
}
/**
* 单元格高度
* @param val
*
*/
public function set cellHeight(val:Number):void
{
this._cellWidth=(val*2);
this._cellHeigth=val
this._cellSize=val/this._anglex*.5
}
/**
* 索引点
* @param point
*
*/
public function set keyPoint(point:Point):void
{
this._keyPoint=point;
this._key=point.x+','+point.y
}
public function get keyPoint():Point
{
return this._keyPoint;
}
/**
* 键值
* @return
*
*/
public function get key():String
{
return this._key;
}
public function get cellSize():Number
{
return this._cellSize
}
public function get cellWidth():Number
{
return this._cellWidth
}
public function get cellHeight():Number
{
return this._cellHeigth
}
public function get origin():Point
{
return this._origin;
}
public function get leftVertex():Point
{
return this._leftVertex;
}
/**
*顶部的点
* @return
*
*/
public function get topVertex():Point
{
return this._topVertex;
}
/**
*右边的点
* @return
*
*/
public function get rightVertex():Point
{
return this._rightVertex;
}
/**
* 下方的点
* @return
*
*/
public function get bottonVertex():Point
{
return this._bottonVertex;
}
/**
* 中间的点位置
* @return
*
*/
public function get midpoint():Point
{
return this._midpoint;
}
}
}
分享到:
相关推荐
总的来说,地理坐标系转换工具V.1.3是IT行业中处理地理定位问题的一个实用工具,通过它,开发者和使用者可以方便地在不同坐标系之间切换,确保地图数据的准确性和一致性。无论是进行地图应用开发、数据分析,还是...
【GIS工具箱】集成了坐标拾取器、坐标系转换工具和随机坐标生成工具;已被300人的公司广泛使用。良心资源,童叟无欺! 打包出售,更实惠! https://download.csdn.net/download/jingqia/75970880
"使用说明.txt"文件很可能是详细的操作指南,它会指导用户如何利用这个工具进行坐标转换,包括输入数据格式、调用函数或命令行参数等。"坐标说明.txt"可能包含有关各种坐标系的详细解释和技术背景,比如它们的坐标...
对于开发者而言,理解坐标系转换原理和使用这类工具,有助于提高项目的专业性和效率。 在实际操作中,用户需要确保选择正确的输入和输出坐标系,避免因为误选而导致的位置偏差。同时,由于坐标系转换可能涉及到敏感...
火星坐标转换是一个在...总的来说,火星坐标转换工具是连接北斗系统与其他全球导航系统的关键桥梁,其批量转换功能大大提升了数据处理的效率。"BackToMars"这个压缩包提供的工具,无疑是实现这一目标的实用解决方案。
在IT领域,尤其是在地理信息系统(GIS)和测绘科学中,坐标系转换是一个至关重要的主题。这里我们关注的是“空间直角坐标系”、“CGCS大地坐标系”以及它们与“平面坐标”的相互转换。让我们深入了解一下这些概念...
7. **应用范围**:这个工具对于需要在不同坐标系间进行数据交互的开发者或者GIS专业人士非常有用,例如,从WGS84坐标系的OpenStreetMap数据转换成GCJ02坐标系,以便在中国地图服务上正确显示。 总的来说,这个...
在地理信息系统(GIS)和测绘领域,坐标系的转换是一个重要的环节。WGS84坐标系(World Geodetic System 1984)是一种全球性的...利用合适的转换工具,我们可以实现不同坐标系间的数据交换,促进地理信息的有效应用。
因此,2000坐标系转换工具允许用户将54坐标系、80坐标系的数据转换到CGCS2000,实现全国范围内的统一和精确定位。 4. **坐标转换软件**: 提到的“坐标转换”可能是一款软件或服务,它提供了用户友好的界面,能够...
这类工具通常支持批量转换,对于大量坐标数据的处理非常高效。 5. 应用场景:坐标转换在多个领域都有应用,如地图制作、遥感影像处理、地理信息系统开发、GPS定位等。例如,当GPS设备采集的数据基于WGS84坐标系,但...
在IT行业中,尤其是在地理信息系统(GIS)开发中,坐标系转换是一个重要的环节。本文将详细介绍如何使用Java实现WGS84坐标与Google地图坐标、百度地图坐标之间的转换,并且会探讨相关的理论背景以及如何在实际项目中...
在GIS(地理信息系统)领域,地图坐标系是至关重要的概念,因为它们决定了地图上点、线和面的位置。本压缩包“不同地图坐标系...理解并掌握坐标系转换的知识和工具,能极大地提高工作效率,并确保地图数据的准确性。
- 在惯性导航系统中,这些转换常用于将陀螺仪和加速度计的数据从惯性坐标系转换到导航坐标系,进而计算出飞行器的位置、姿态和速度。 7. **学习与使用**: - 通过分析和运行这些MATLAB代码,用户可以深入理解坐标...
雷达坐标系与笛卡尔坐标系插值转换 雷达坐标系与笛卡尔坐标系插值转换是计算机视觉和雷达技术中的重要概念。本文将详细介绍雷达坐标系与笛卡尔坐标系之间的插值转换,包括径向插值、方位插值和高度插值。 径向插值...
GPS坐标转换工具主要用于将全球定位系统(GPS)获取的经纬度数据转换为不同坐标系下的XY坐标,或者进行度分秒与十进制度之间的转换,以及米制与其它长度单位间的换算。以下是对这些知识点的详细说明: 1. GPS坐标...
为了确保地理数据的一致性和准确性,将WGS84坐标系转换为任意坐标系的需求日益凸显。 #### 二、WGS84坐标系与任意坐标系概述 **WGS84坐标系**是一种地心坐标系,以地球质量中心为原点,采用地球参考椭球体(GRS80...
在实际应用中,由于不同的软件工具和平台可能采用不同的坐标系统,因此经常需要在左手坐标系和右手坐标系之间进行数据转换。数据转换主要包括顶点位置、平移、旋转变换以及相机和光源的位置和方向等。 ##### 1. ...
坐标转换工具是GIS(地理信息系统)领域中必不可少的软件组件,用于在不同的地理坐标系统之间进行数据转换。本文将详细探讨“笑脸2.0版”坐标转换工具,它支持包括北京54、西安80和CGCS2000在内的多种坐标系。 首先...
百度坐标系到WGS84坐标的转换通常涉及两个步骤:首先,需要将百度坐标系的XY坐标转换到CGCS2000坐标,然后将CGCS2000坐标转换到WGS84坐标。转换公式如下: 1. 百度坐标到CGCS2000坐标: \( X_{CGCS2000} = X_{BD} ...
这个“七参数坐标转换工具”能够支持在WGS84、北京54、西安80和CGCS2000之间任意两个坐标系的转换,这意味着用户可以方便地处理涉及不同坐标系的数据,而无需复杂的数学计算。此外,工具还支持自定义参数转换,这...