精华内容
下载资源
问答
  • 两点确定直线方程

    千次阅读 2012-05-21 10:45:42
    void get_line(CvPoint2D32f pt_a,CvPoint2D32f pt_b,float &A,float &B,float &C) { if(pt_a.x!=pt_b.x) { A=(pt_b.y-pt_a.y)/(pt_b.x-pt_a.x); B=-1; C=pt_a.y-k*pt_a.x; } ...
    void get_line(CvPoint2D32f pt_a,CvPoint2D32f pt_b,float &A,float &B,float &C)
    {
    	if(pt_a.x!=pt_b.x)
    	{
    		A=(pt_b.y-pt_a.y)/(pt_b.x-pt_a.x);
    		B=-1;
    		C=pt_a.y-k*pt_a.x;		
    	}
    	else
    	{
    		A=1;
    		B=0;
    		C=-pt_a.x;
    	}
    }

    展开全文
  • 声明一个类Point,然后利用它声明一个组合类Line,实现由用户输入两点确定直线的长度和斜率,编写程序实现测试
  • // 打印当前 public void Print_Point() { System.out.print("Point0:("+p0.x+","+p0.y+")"+" "); System.out.print("Point1:("+p1.x+","+p1.y+")"+"\r\n"); } // 打印计算结果 public void Print() ...

    最近在自学JAVA,学到类与对象章节,分享一个自我感觉还可以的例题答案,自己编写的,发出来希望大神们知道一二。

    源程序如下:

    package Line_Test;
    
    public class Line_Test {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    
    		// 线段测试
    		Line line = new Line(new Line.Point(2,3),new Line.Point(4,5));
    		line.Print_Point();	
    		line.Print();		
    		
    		System.out.println();		
    
    		Line line1 = new Line(new Line.Point(2,3),new Line.Point(2,5));
    		line1.Print_Point();	
    		line1.Print();		
    		
    		System.out.println();
    
    		Line line2 = new Line(new Line.Point(2,3),new Line.Point(4,3));
    		line2.Print_Point();	
    		line2.Print();		
    		
    		System.out.println();
    	}
    
    }
    
    //线段类
    class Line{	
    	public static class Point{
    		private float x,y;
    		
    		public Point()
    		{
    			x = 2;
    			y = 3;
    		}
    		
    		public Point(float x,float y)
    		{
    			this.x = x;
    			this.y = y;
    		}
    	}
    	
    	private Point p0;
    	private Point p1;
    	
    	// 重载构成函数
    	public Line()
    	{
    		this.p0 = new Point(2,3);
    		this.p1 = new Point(4,5);
    	}	
    	// 重载构成函数
    	public Line(Point p0,Point p1)
    	{
    		this.p0 = new Point(p0.x,p0.y);
    		this.p1 = new Point(p1.x,p1.y);
    	}
    	
    	// 线段长度
    	public float Line_Length()
    	{
    		if(this.isLineH())
    		{
    			return Math.abs(p1.y-p0.y);			
    		}
    		else if(this.isLineV())
    		{
    			return Math.abs(p1.x-p0.x);
    			
    		}
    		else
    		{
    			return (float)Math.sqrt((Math.pow((p1.x-p0.x),(p1.x-p0.x))+Math.pow((p1.y-p0.y),(p1.y-p0.y))));
    		}
    	}
    	
    	// 线段水平  true:Yes  false:No
    	public boolean isLineH()
    	{
    		return (p0.x==p1.x);
    	}
    
    	// 线段垂直  true:Yes  false:No
    	public boolean isLineV()
    	{
    		return (p0.y==p1.y);
    	}
    	
    	// 线段斜率 
    	public float LineSlope()
    	{
    		return (p1.y-p0.y)/(p1.x-p0.x);
    	}
    	
    	// 求线段中点
    	public Point LineMid()
    	{
    		Point p = new Point();
    		p.x = (p1.x+p0.x)/2.0f;
    		p.y = (p1.y+p0.y)/2.0f;
    		return p;
    	}
    	
    	// 打印当前点
    	public void Print_Point()
    	{
    		System.out.print("Point0:("+p0.x+","+p0.y+")"+" ");
    		System.out.print("Point1:("+p1.x+","+p1.y+")"+"\r\n");
    	}
    	
    	// 打印计算结果
    	public void Print()
    	{
    		System.out.println("Line length:"+this.Line_Length());
    		System.out.println("Line horizontal?"+this.isLineH());
    		System.out.println("Line vertical?"+this.isLineV());
    		System.out.println("Line slope:"+this.LineSlope());
    		System.out.println("Line mid:("+this.LineMid().x+","+this.LineMid().y+")");
    	}
    	
    }

    运行结果如下:

    感觉JAVA用起来是比较方便,第一次写JAVA程序,还望大神指导一下不足之处。

    展开全文
  • 图像上个像素可以确定一条直线,可如何通过直线方程把这些像素位置找出来呢?大家都会想到用直线方程来算,可是图像上像素位置的坐标都是整数值,通过y = k*x+b计算出来的y很可能是小数,即使将y做取整运算,也...

      图像上两个像素点可以确定一条直线,可如何通过直线方程把这些像素位置找出来呢?大家都会想到用直线方程来算,可是图像上像素位置的坐标都是整数值,通过y = k*x+b计算出来的y很可能是小数,即使将y做取整运算,也不能很好的描述直线上的点,很可能导致描述出来的直线呈“虚线”形式,如 直线方程y = 0.2*x + 0.3:

              0.5 = 0.2*1 + 0.3,   坐标(1,0.5);

              0.7 = 0.2*2 + 0.3,  坐标(2,0.7);

              0.9 = 0.2*3 + 0.3,  坐标(3.0.9)。

     描述出来的直线往往如下图所示,如下图所示。

                                               

                                    常用方法画的直线     matlab的line函数画的直线

      当初也觉得这是个很容易解决的问题,描出来的直线却不尽人意,粗略搜了一下网上关于这方面的资料也很少。因此,作者在此给出一个方便快捷的计算方法,将这些直线上的像素位置给找出来。

        我们已知A(x1,y1)、B(x2,y2)两个点,可以确定AB斜率k以及直线方程y = k*x+b的坐标值截距b;

    算法步骤:

      1.分别计算两点之间的横坐标和纵坐标差值:

          deltaH = abs(y1 - y2);

          deltaW = abs(x1 - x2);

        2.设置循环变量范围,如果deltaH < deltaW,则自变量范围是[x1,x2](假设x1<x2),反之自变量范围是[y1,y2];

        3. 当deltaH < deltaW时,选择A、B中任意一点做起始点,分别计算当横坐标自变量为j、纵坐标为i时,根据直线方程得到的截距Tmpb和b之间的差值,差值最小时对应的自变量i即为纵坐标位置,代码是(代码中的Coor保存的是直线上像素点位置):

    for j = x1 : x2
                Hb = y1 - 1;                            %以A点为起点
                He = y1 + 1;
                H = 0;
                W = 0;
                Min = 1000;        
                for i = Hb : He
                    Tmpb = i - k*j;
                    delta = abs(b - Tmpb);
                    if delta < Min
                        Min = delta;
                        H = i;
                        W = j;
                    end
                end
                if H ~= 0 && W ~= 0
                    Num = Num + 1;                  %直线上像素点个数
                    Coor(Num,1) = H;                %直线上像素点位置坐标
                    Coor(Num,2) = W;
                    y1 = H;
                end                
            end

       当deltaH > deltaW时

    for i = y1 : y2
                Min = 1000;
                H = 0;
                W = 0;
                Wb = x1 - 4;                    %自变量变化范围可根据直线特征设定
                We = x1 + 4;
                for j = Wb : We
                    Tmpb = i - k*j;
                    delta = abs(b - Tmpb);
                    if delta < Min
                        Min = delta;
                        H = i;
                        W = j;
                    end
                end
                if H ~= 0 && W ~= 0
                    Num = Num + 1;
                    Coor(Num,1) = H;
                    Coor(Num,2) = W;
                    x1 = W;
                end
            end

    本文方法画的直线

    转载于:https://www.cnblogs.com/ImageVision/archive/2012/11/17/2775196.html

    展开全文
  • 如上图,已知四个(x0,y0)、(x1,y1)、(x2,y2)、(x3,y3),其中(x0,y0)、(x1,y1)确定直线1,(x2,y2)、(x3,y3)确定直线2,求直线1、直线2的交点(x,y),公式如下: y = ( (y0-y1)*(y3-y2)*x0 + (y3-y2)*(x1-x0)*y0 + ...

    两点确定一条直线,已知四个点确定的两条直线,求这两条直线的交点

    如上图,已知四个点(x0,y0)、(x1,y1)、(x2,y2)、(x3,y3),其中(x0,y0)、(x1,y1)确定直线1,(x2,y2)、(x3,y3)确定直线2,求直线1、直线2的交点(x,y),公式如下:

     

    y = ( (y0-y1)*(y3-y2)*x0 + (y3-y2)*(x1-x0)*y0 + (y1-y0)*(y3-y2)*x2 + (x2-x3)*(y1-y0)*y2 ) / ( (x1-x0)*(y3-y2) + (y0-y1)*(x3-x2) );

     

    x = x2 + (x3-x2)*(y-y2) / (y3-y2);

     

    展开全文
  • 平面几何:两点确定一条直线

    千次阅读 2018-11-08 23:02:00
    个不同A,B确定一条直线,AB相同返回的值全0 直线方程:Ax+By+c=0 A = y2 - y1; B = x1 - x2; C = -Ax1 - By1 = x2y1 - x1y2; 证明之后补上; Line LineMake(Point A, Point B) { Line l; l.A = B.y - A.y; l.B...
  • vtk 两点确定一条直线的可视化

    千次阅读 2017-06-09 09:20:18
    已知的坐标StartPoint,EndPoint,用vtk可视化其确定直线。 vtkSmartPointer&lt;vtkPoints&gt; Points = vtkSmartPointer&lt;vtkPoints&gt;::New(); Points-&gt;InsertNextPoint...
  • import numpy as np def pedal(p1, p2, p3): """ ... 直线垂直, 且交点为垂足 :param p1: (x1, y1) :param p2: (x2, y2) :param p3: (x3, y3) :return: 垂足坐标 (x, y) """ if p2[0] !=
  • /* 个不同A,B确定一条直线,AB相同返回的值全0 * 直线方程:Ax+By+c=0 * A = y2 - y1; * B = x1 - x2; * C = -A*x1 - B*y1 = x2*y1 - x1*y2; */ Line LineMake(Point A, Point B) { Line l; l.A = B.y - ...
  • 1.先获取两点的坐标 2.计算弦长及旋转角度 3.绘制线 <div class="quality-analysis"> <div class="cnt-box"> <span class="selected-start"> <svg class="icon fs1...
  • //求一直线与图边界的交点 bool get_cross_pt_with_pic(CvPoint input_pt1,CvPoint input_pt2,vector& cross_pt,IplImage* img) { if (input_pt1.x>=img->width||input_pt1.x=img->height ||input_pt2.x>=img...
  • 设已知直线上的两点(x1, y1)、(x2, y2);以及直线外的一点(x0, y0) 则直线两点式及对应的一般式为: 由于两条直线垂直,则两条直线的斜率的乘积为-1,可以得到直线一般式的系数表示的直线垂直公式。如下 ...
  • 平面上N个,没确定一条直线,求出斜率最大的那条直线所通过的(斜率不存在的情况不考虑)。 先把N个按x排序。 斜率k最大值为max(斜率(point[i],point[i+1])) 1 &lt;=i &lt; n-1。 ...
  • 平面上N个,每确定一条直线, 求出斜率最大的那条直线所通过的(斜率不存在的情况不考虑)。时间效率越高越好。 平面上N个,每确定一条直线,求出斜率最大的那条直线所通过的...
  • 平面上N个,每确定一条直线,求出斜率最大的那条直线所通过的(斜率不存在的情况不考虑)。时间效率越高越好。 关于这道题,网上已经给出了解答要点: 3个A,B,C,把它们的按x坐标排序。假设排序...
  • package 直线; import java.util.*; public class 交点及面积 { static float k,b,k1,b1,k2,b2,jiaox,jiaoy,mianji; static int flag1=0,flag2=0; public static void main(String args[]) { float x1,y1,x2,...
  • 背景介绍最近在水面无人艇(USV)模拟仿真中,用到了一些点和...博客更新可参见github点线关系两点确定直线表达式定义空间直线的表达式有多种,比如一般式Ax+By+C=0、点斜式y-y0=k(x-x0)、截距式x/a+y/b=1、两点式:(y...
  • 平面上N个,没确定一条直线,求出斜率最大的那条直线所通过的(斜率不存在的情况不考虑)。 先把N个按x排序。 斜率k最大值为max(斜率(point[i],point[i+1])) 1 <=i < n-1。 复杂度Nlog(N...
  • // 计算两直线的交点x坐标 private float crossPointX(float line1x1, float line1y1, float line1x2, float line1y2, float line2x1, float line2y1, float line2x2, float line2y2) { float ...
  • 都说两点确定一条直线,那么设计一个直线类Line,需要通过两个点Point对象来确定。Line类具体要求如下: 1)定义两个Point对象p1,p2; 2)写出有参构造方法,传递两个对象值给p1,p2 3)为p1,p2写出setters,和...
  • 如何由两点坐标确定一条直线的ax+by+c=0表达式 比如已知两坐标: (x1,y1),(x2,y2); 对于表达式ax+by+c=0; a=?,b=?,c=?; y=kx+m, y1=kx1+m y2=kx2+m, k=(y2-y1)/(x2-x1) m=y1-(y2-y1)x1/(x2-x1) y=(y2-y1)/(x2-x1)x+...
  • 平面上N个,没确定一条直线,求出斜率最大的那条直线所通过的(斜率不存在的情况不考虑)。时间效率越高越好。 先把N个按x排序。 斜率k最大值为max(斜率(point[i],point[i+1])) 0 复杂度...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,085
精华内容 434
关键字:

两点确定直线