写的小例子,备份
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" minWidth="955" minHeight="600" creationComplete="init()">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
//存放鼠标电击的点,最多存放2个
private var clickPoint:Array = [];
//存放画线的点.
private var pointArray:Array = [];
private function init():void{
}
//判断p是否在p1,p2组成的线段上.
private function isOnLine(p:Point,p1:Point,p2:Point):Boolean{
//根据数学,求出直接的表达示:y=kx+b
var k:Number = (p1.y-p2.y)/(p1.x-p2.x);
var b:Number = p1.y-k*p1.x;
//将点的x坐标代入表达示中,判断该点是否在直线上
var py:Number = p.x*k+b;
var value:Number = p.y-py;
if(value>-0.01&&value<0.01){
return true;
}else{
return false;
}
}
//画布区域的点击事件
private function click(event:MouseEvent):void{
var p:Point = new Point(event.localX,event.localY);
//存放鼠标点击的坐标
clickPoint.push(p);
if(clickPoint.length>1){
var length:int = clickPoint.length;
startPoint.text = clickPoint[length-2].x + "," +clickPoint[length-2].y;
endPoint.text = p.x + "," +p.y;
if(length>2){
clickPoint.shift();
}
}else{
startPoint.text = p.x + "," +p.y;
}
// var p:Point = new Point(event.localX,event.localY);
//
// var p1:Point = new Point(0,0);
// var p2:Point = new Point(100,100);
//
//
// var result:Boolean = isOnLine(p,p1,p2);
//
// trace(p.x+","+p.y);
// trace(result);
//Alert.show(result.toString());
}
//计算p1,p2组成的线段和p3,p4组成的线段的交点
private function getHitPoint(p1:Point,p2:Point,p3:Point,p4:Point):Point{
//根据数学,求出直接的表达示:y=kx+b
var p:Point = null;
//两条线均不与Y轴平行
if(p1.x!=p2.x&&p3.x!=p4.x){
var k1:Number = (p1.y-p2.y)/(p1.x-p2.x);
var b1:Number = p1.y-k1*p1.x;
var k2:Number = (p3.y-p4.y)/(p3.x-p4.x);
var b2:Number = p3.y-k2*p3.x;
//两条线平行
if(k1 == k2) return null;
p = new Point;
p.x = -(b1-b2)/(k1-k2);
p.y = (k1*b2-k2*b1)/(k1-k2);
}else{
var k:Number;
var b:Number;
//经过p1,p2的直线与y轴平行,
if(p1.x == p2.x && p3.x!=p4.x){
k = (p3.y-p4.y)/(p3.x-p4.x);
b = p3.y-k*p3.x;
p = new Point;
p.x = p1.x;
p.y = k*p.x+b;
}else if(p1.x != p2.x){
k = (p1.y-p2.y)/(p1.x-p2.x);
b = p1.y-k*p1.x;
p = new Point;
p.x = p3.x;
p.y = k*p.x+b;
}
}
//如果两条线段没有相交,延长线相交则返回null
if(p){
if(p.x<Math.min(p1.x,p2.x)||p.x>Math.max(p1.x,p2.x)||p.x<Math.min(p3.x,p4.x)||p.x>Math.max(p3.x,p4.x)||
p.y<Math.min(p1.y,p2.y)||p.y>Math.max(p1.y,p2.y)||p.y<Math.min(p3.y,p4.y)||p.y>Math.max(p3.y,p4.y)){
return null;
}
}
return p;
}
private function drawLine(event:MouseEvent):void{
if(clickPoint.length>1){
createLine(clickPoint[0],clickPoint[1]);
if(pointArray.length == 0){
line1.text = "("+clickPoint[0].x+","+clickPoint[0].y+"),"+"("+clickPoint[1].x+","+clickPoint[1].y+")";
}else{
line2.text = "("+clickPoint[0].x+","+clickPoint[0].y+"),"+"("+clickPoint[1].x+","+clickPoint[1].y+")";
}
pointArray = pointArray.concat(clickPoint);
clickPoint = [];
}
}
//根据两点,画线
private function createLine(p1:Point, p2:Point):void{
canvas.graphics.lineStyle(2,0xFF0000,1);
canvas.graphics.moveTo(p1.x,p1.y);
canvas.graphics.lineTo(p2.x,p2.y);
}
//清除线
private function clearLine(event:MouseEvent):void{
clickPoint = [];
pointArray = [];
startPoint.text = "";
endPoint.text = "";
line1.text = "";
line2.text = "";
crossPoint.text = "";
canvas.graphics.clear();
}
private function getPoint(event:MouseEvent):void{
if(pointArray.length == 4){
var point:Point = getHitPoint(pointArray[0],pointArray[1],pointArray[2],pointArray[3]);
if(point){
crossPoint.text = "("+point.x+","+point.y+")";
}else{
crossPoint.text = "无交点";
}
}
}
]]>
</mx:Script>
<mx:Canvas height="30">
<mx:Text text="起点:" x="0" width="40"/>
<mx:TextInput id="startPoint" x="45" width="40" editable="false"/>
<mx:Text text="终点:" x="85" width="40"/>
<mx:TextInput id="endPoint" x="130" width="40" editable="false"/>
<mx:Button id="btn" x="200" label="画线" click="drawLine(event)" width="60"/>
<mx:Button id="clear" x="280" label="清除" click="clearLine(event)" width="60"/>
</mx:Canvas>
<mx:Canvas y="40" height="30">
<mx:Text text="线1:" x="0" width="40"/>
<mx:TextInput id="line1" x="45" width="120" editable="false"/>
<mx:Text text="线2:" x="170" width="40"/>
<mx:TextInput id="line2" x="215" width="120" editable="false"/>
<mx:Button x="340" label="求交点" click="getPoint(event)" width="60"/>
<mx:Text text="焦点:" x="405" width="40"/>
<mx:TextInput id="crossPoint" x="450" width="80" editable="false"/>
</mx:Canvas>
<mx:Canvas y="80" id="canvas" width="200" height="200" click="click(event)" borderStyle="solid"/>
</mx:Application>
分享到:
相关推荐
HALCON源码画两个直线,找两条线的交点,
C++语言实现一些基本算法(两点距离、点是否在直线上、点与直线的关系、两直线的夹角、两直线的交点、两个举行的重合面积等等)
判断通过空间的坐标点确定的选段是否相交,相交的求出交点
求两条直线交点,交点必须在两条线段上,首先计算两直线是否有交点,再判断交点是否在线段上。
由于项目需要,写了两个函数,IsLineSegmentCross和GetCrossPoint,对于各种情况都能很好适应,并正确的求出交点。通过了各种测试,完美的实现个算法真不容易啊! 这个是连带一个MFC测试的程序工程VC6.0源码!
利用eigen库内矩阵运算函数,写了LinesPositionRelationship3D类。实现了确定三维空间任意两条直线位置关系并获得在平行和交错条件下的两直线距离的功能。该类是在确定空间两圆柱轴线关系下的副产品。
15.判断两条直线是否相交及求直线交点 7 16.判断线段是否相交,如果相交返回交点 7 ㈢ 多边形常用算法模块 1. 判断多边形是否简单多边形 8 2. 检查多边形顶点的凸凹性 9 3. 判断多边形是否凸多边形 9 4. 求...
一、 注意事项 4 二、 一些公式 4 三、二维相关 6 基础: 6 点-点距离 7 点-点对称点 7 ...裸的n条线段判断是否有相交(O(nlogn)) 11 判断两直线平行 12 判断两直线垂直 12 给两点求直线方程参数 12
geotools 判断几何要素的交点 当时想到用的GDAL 但是 交点函数返回的对象总是null , 改用 GeoTools 这个库,需要用到jar 到官网上下载,主要是jts-core-1.16.0.jar
㈡ 线段及直线的基本运算 1. 点与线段的关系 3 2. 求点到线段所在直线垂线的垂足 4 3. 点到线段的最近点 4 ...15.判断两条直线是否相交及求直线交点 7 16.判断线段是否相交,如果相交返回交点 7
15.判断两条直线是否相交及求直线交点 7 16.判断线段是否相交,如果相交返回交点 7 ㈢ 多边形常用算法模块 1. 判断多边形是否简单多边形 8 2. 检查多边形顶点的凸凹性 9 3. 判断多边形是否凸多边形 9 4. 求...
15.判断两条直线是否相交及求直线交点 16.判断线段是否相交,如果相交返回交点 ㈢ 多边形常用算法模块 1. 判断多边形是否简单多边形 2. 检查多边形顶点的凸凹性 3. 判断多边形是否凸多边形 4. 求多边形面积 5. 判断...
7.14计算两条直线的交点 28 7.15计算直线与平面的交点 28 7.16计算两平面的交线 29 7.17点到直线的距离 29 7.18 计算点到平面的距离 29 7.19计算直线到直线的距离 30 7.20空间两直线夹角的cos值 30 7.21两平面夹角的...
15.判断两条直线是否相交及求直线交点 7 16.判断线段是否相交,如果相交返回交点 7 ㈢ 多边形常用算法模块 1. 判断多边形是否简单多边形 8 2. 检查多边形顶点的凸凹性 9 3. 判断多边形是否凸多边形 9 4. 求...
本文整理的计算几何基本概念和常用算法包括如下... 计算两条共线的线段的交点 25. 计算线段或直线与线段的交点 26. 求线段或直线与折线、矩形、多边形的交点 27. 求线段或直线与圆的交点 28. 凸包的概念 29. 凸包的求法
15.判断两条直线是否相交及求直线交点 7 16.判断线段是否相交,如果相交返回交点 7 ㈢ 多边形常用算法模块 1. 判断多边形是否简单多边形 8 2. 检查多边形顶点的凸凹性 9 3. 判断多边形是否凸多边形 9 4. 求...
计算两条共线的线段的交点 25. 计算线段或直线与线段的交点 26. 求线段或直线与折线、矩形、多边形的交点 27. 求线段或直线与圆的交点 28. 凸包的概念 29. 凸包的求法 ㈠ 点的基本运算 <br>1...
15.判断两条直线是否相交及求直线交点 7 16.判断线段是否相交,如果相交返回交点 7 ㈢ 多边形常用算法模块 1. 判断多边形是否简单多边形 8 2. 检查多边形顶点的凸凹性 9 3. 判断多边形是否凸多边形 9 4. 求...
12.判断两条直线是否相交及求直线交点 13.判断线段是否相交,如果相交返回交点 ㈢ 多边形常用算法模块 1. 判断多边形是否简单多边形 2. 检查多边形顶点的凸凹性 3. 判断多边形是否凸多边形 4. 求多边形面积 5. 判断...