最近工作中用到这个,去网上搜了一下,有些能用但是不完善,没考虑与x,y轴平行的情况,稍微修改一下如下,做个记录,方便后续查阅:
/**
* 计算两条直角的交点
*/
public static TPoint getCrossPoint(ModelLine line1,ModelLine line2){
TPoint result = new TPoint();
if (line1.pt1.getX() == line1.pt2.getX()) {
float a2 = (line2.pt1.getY()-line2.pt2.getY())/(line2.pt1.getX()-line2.pt2.getX());
float b2 = line2.pt1.getY()-a2*(line2.pt1.getX());
result.setJd(line1.pt1.getX());
result.setWd(a2*result.getJd()+b2);
} else if (line2.pt1.getX() == line2.pt2.getX()) {
float a1 = (line1.pt1.getY()-line1.pt2.getY())/(line1.pt1.getX()-line1.pt2.getX());
float b1 = line1.pt1.getY()-a1*(line1.pt1.getX());
result.setJd(line2.pt1.getX());
result.setWd(a1*result.getJd()+b1);
} else {
float a1 = (line1.pt1.getY()-line1.pt2.getY())/(line1.pt1.getX()-line1.pt2.getX());
float b1 = line1.pt1.getY()-a1*(line1.pt1.getX());
float a2 = (line2.pt1.getY()-line2.pt2.getY())/(line2.pt1.getX()-line2.pt2.getX());
float b2 = line2.pt1.getY()-a2*(line2.pt1.getX());
result.setJd((b1-b2)/(a2-a1));
result.setWd(a1*result.getJd()+b1);
}
return result;
}
java的代码写算法有些累赘,看着有些麻烦,但是看懂结构其实也不麻烦,其实就是点斜式求解的方法。其他实体类就不给出了。