关键字:AS3 ActionScript3 图形 两条直线交点
今天在做数据关系图表时,需要求两条直线相交的交点坐标,代码整理如下:
package org.hadronforce.charts.utils.math{
import flash.geom.Point;
import org.hadronforce.charts.baseobjects.Line;
/**
* 点计算类
* @Author:Robin
*/
public class PointCalculator{
/**
* 求两条直线交点.
* 如果两直线无交点,则返回null。
*/
public static function getIntersection(line1:Line, line2:Line):Point{
var x:Number;//被求交点的x轴坐标
var y:Number;//被求交点的y轴坐标
var k1:Number;//line1的斜率
var b1:Number;//line1的纵截距
var k2:Number;//line2的斜率
var b2:Number;//line2的纵截距
/*
分别求出line1和line2的斜率
公式:斜率k= tan(a) = y/x
*/
k1 = (line1.startPoint.y - line1.endPoint.y) / (line1.startPoint.x - line1.endPoint.x);
k2 = (line2.startPoint.y - line2.endPoint.y) / (line2.startPoint.x - line2.endPoint.x);
/*
根据斜截式 y = kx + b
可得推导式:b = y - kx
将k1,k2代入推导式,分别求b1,b2
*/
b1 = line1.startPoint.y - k1 * line1.startPoint.x;
b2 = line2.startPoint.y - k2 * line2.startPoint.x;
if (k1 == k2){//当两条直线平行时返回null;
return null;
}else if ((k1 == Number.POSITIVE_INFINITY || k1 == Number.NEGATIVE_INFINITY) &&
(k2 == Number.NEGATIVE_INFINITY || k2 == Number.POSITIVE_INFINITY)){
//当两条直线平行时(特例,均垂直于y轴)返回null;
return null;
}else if (k1 == Number.POSITIVE_INFINITY || k1 == Number.NEGATIVE_INFINITY){
//当line1垂直于y轴时(斜率为正无穷或负无穷),进行如下计算
x = line1.startPoint.x;
y = k2 * x + b2;
}else if (k2 == Number.POSITIVE_INFINITY || k2 == Number.NEGATIVE_INFINITY){
//当line2垂直于y轴时(斜率为正/负无穷),进行如下计算
x = line2.startPoint.x;
y = k1 * x + b1;
}else{
/*
连例 y = k1 * x + b1
y = k2 * x + b2
得到推导式:x = (b1 - b2)/(k2 - k1)
*/
x = (b1 - b2) / (k2 - k1);
/*
将x值带入斜截式方程,可求y值
*/
y = k1 * x + b1;
}
return new Point(x,y);
}
}
}
发表评论
| 姓名: | |
| E-mail: | |
| 地址: | |


评论
glqpmi gtmqj frpwkx
swebgp ampbt
kbpgfzr sjpf
tumbea tuoazf
mahoig
abvkoig wivjns xmde
fsrv sbngwohy brefzchv wrifx afqijyu wyszut vdyxa