• // 打印当前 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程序，还望大神指导一下不足之处。
展开全文
• 声明一个类Point，然后利用它声明一个组合类Line，实现由用户输入两点确定直线的长度和斜率，编写程序实现测试
• 1.先获取两点的坐标 2.计算弦长及旋转角度 3.绘制线 <div class="quality-analysis"> <div class="cnt-box"> <span class="selected-start"> <svg class="icon fs1...
页面上有两颗星星图标，画一条线连接两颗星星。
1.先获取两点的坐标   2.计算弦长及旋转角度   3.绘制线
<div class="quality-analysis">
<div class="cnt-box">
<span  class="selected-start">
<svg class="icon fs16 warn-text icon-orange " aria-hidden="true">
</svg>
</span>
<span  class="selected-start">
<svg class="icon fs16 gray-text" aria-hidden="true">
</svg>
</span>
</div>
</div>
<script>
export default {
data() {
return {
positionList: [], // 获取坐标
}
},
mounted() {
this.getStartPosition()
this.drawLine(this.positionList)
},
methods: {
// 获取星星坐标
getStartPosition() {
let nodeList = document.querySelectorAll('.selected-start')
let parentNode = document.querySelector('.cnt-box').offsetParent
let actualLeft = 0
let current = 0
let actualTop = 0
if(nodeList.length>0){
for(let i=0;i<nodeList.length;i++){
actualLeft = nodeList[i].offsetLeft  // 累加计算星星相对于顶级父元素的距离
actualTop = nodeList[i].offsetTop
current = nodeList[i].offsetParent
while(current!== parentNode){
actualLeft += current.offsetLeft
actualTop += current.offsetTop
current = current.offsetParent
}
let obj = {
x:actualLeft,
y:actualTop,
}
this.positionList.push(obj)
}
}

},

// 画星星连线
drawLine(positionList) {
if(positionList.length>0){
for(let i=1;i<positionList.length;i++){
// 计算长宽
let rectWidth = Math.abs(positionList[i].x - positionList[i-1].x)
let rectHeight = Math.abs(positionList[i].y - positionList[i-1].y)
// 在页面确定div左上角的具体位置
let rectX = positionList[i].x < positionList[i-1].x ? positionList[i].x : positionList[i-1].x
let rectY = positionList[i].y < positionList[i-1].y  ? positionList[i].y : positionList[i-1].y

// 弦长
let stringWidth = Math.ceil(Math.sqrt((rectWidth * rectWidth)+ (rectHeight*rectHeight)))
let xPad = (rectWidth - stringWidth)/2
let yPad = (rectHeight - 2)/2
// 从x轴到(x,y)的旋转角度
let radNum = Math.atan2((positionList[i].y - positionList[i-1].y),(positionList[i].x - positionList[i-1].x))
let  traX  = rectX +  xPad - 8 // 8为星星图标大小的1/2
let  traY  = rectY +  yPad + 8
// 创建div
let div = document.createElement('div')
div.innerHTML = '<div ' +
' style = "width:' + stringWidth + 'px;height:2px;transform:translate(' + traX+ 'px,' + traY +'px) rotate('+ radNum+ 'rad) " class="draw-line-style"></div>'
let doc = document.querySelector('.quality-analysis')
doc.appendChild(div)
}
}
}
}
}
</script>
说明：
<style lang="scss">
.quality-analysis {
position: relative;
.draw-line-style{
top: 0;
position: absolute;
border-top: 1px solid \$bgOrange;
}
</style>
1.每个元素都有offsetTop和offsetLeft属性，表示该元素的左上角与父容器（offsetParent对象）左上角的距离。所以，只需要将这两个值进行累加，就可以得到该元素的绝对坐标。
2.atan2(y,x) ：返回从 x 轴到点 (x,y) 的角度（介于 -PI/2 与 PI/2 弧度之间）。
展开全文
• 两点确定直线方程

千次阅读 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;
}
}

展开全文
• MATLAB 已知两点坐标，求解直线方程代码 x1=input(‘请输入x1=’); y1=input(‘请输入y1=’); x2=input(‘请输入x2=’); y2=input(‘请输入y2=’); if (x1x2)&amp;&amp;(y1y2) disp(‘请输入两个不同的点’)...
MATLAB 已知两点坐标，求解直线方程代码
x1=input(‘请输入x1=’); y1=input(‘请输入y1=’); x2=input(‘请输入x2=’); y2=input(‘请输入y2=’); if (x1x2)&&(y1y2) disp(‘请输入两个不同的点’); return; end if x1==x2 disp(‘直线斜率不存在\n\n’); fprintf(‘求得的直线方程为x=%d\n\n’,x1); else k=(y1-y2)/(x1-x2); b=y1; fprintf('求得的直线方程为y=%d (x-x1)+%d\n\n’,k,b); x=input(‘请输入所要计算的点x=’); y=k(x-x1)+b; fprintf(‘x= %d处,y= %d\n\n’,x,y); end
展开全文
• 两点的叉乘为过两点直线的系数

千次阅读 多人点赞 2018-01-12 10:37:45
已知：二维平面的两点X（x1，y1），Y（x2，y2)，证明X，Y两点的齐次式叉乘为过XY的直线的系数. 证明： 叉乘的定义为已知向量a = (a1,a2,a3), b=(b1,b2,b3), a叉乘b=(a2b3-a3b2, a3b1-a1b3, a1b2-a2b1)  因为XY的...
• 图像上个像素可以确定一条直线，可如何通过直线方程把这些像素位置找出来呢？大家都会想到用直线方程来算，可是图像上像素位置的坐标都是整数值，通过y = k*x+b计算出来的y很可能是小数，即使将y做取整运算，也...
• 已知两点 p1(a1, b1, c1)， p2 (a2, b2, c2) 求直线方程。 要求直线方程首先要理解直线是什么？ 直线是一系列满足一定条件的点的集合。 多维空间下直线通用公式： 其中 p 为直线上任意一点（从原点指向...
• 个不同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...
• python根据点计算直线方程

千次阅读 2021-06-09 18:17:02
# 根据已知两点坐标，求过这两点直线解析方程： a*x+b*y+c = 0 (a >= 0) def getLinearEquation(p1x, p1y, p2x, p2y): sign = 1 a = p2y - p1y if a < 0: sign = -1 a = sign * a b = sign * (p1x - ...
• /* 个不同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 - ...
• 常用的直线方程有一般式 点斜式 截距式 斜截式 两点式等等。除了一般式方程，它们要么不能支持所有情况下的直线（比如跟坐标轴垂直或者平行），要么不能支持所有情况下的点（比如x坐标相等，或者y坐标相等）。...
• C++语言实现一些基本算法(两点距离、点是否在直线上、点与直线的关系、两直线的夹角、两直线的交点、两个举行的重合面积等等)
• 已知直线（四坐标），计算直线的夹角，管道工程上使用
• 已知的坐标StartPoint，EndPoint，用vtk可视化其确定直线。 vtkSmartPointer&lt;vtkPoints&gt; Points = vtkSmartPointer&lt;vtkPoints&gt;::New(); Points-&gt;InsertNextPoint...
• 最近在做叶面重建的工作，构建叶面TIN的算法中会用到3维中点到直线的距离方程，一开始以为像二维一样有公式之类的，后来找了一下没有找到，就写了一个函数，分享一下double dis_3D(Point a,Point b,Point s){ ...
• 利用Matlab编写的两点确定一条直线的程序，可计算其斜率等，利用了disp（）函数，是我们更容易掌握！
• 如何由两点坐标确定一条直线的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+...
• 已知直线上两点求其一般式

千次阅读 2016-05-24 10:20:42
已知直线两点P1 P2，求直线的一般式方程。已知直线上的两点P1(X1,Y1) P2(X2,Y2)， P1 P2两点不重合。求该直线的一般式方程AX+BY+C=0 解当x1=x2时，直线方程为x-x1=0当y1=y2时，直线方程为y-y1=0当x1≠x2，y1≠y2...
• /// /// 根据两点经纬度求直线与正北方向的夹角 /// /// /// /// AB连线与正北方向的角度（顺时针0~360） public static double getAngle(MyLatLng A,MyLatLng B) { doub
• 如上图，已知四个(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 + ...
• 知道两点坐标画直线有很多种方法，这里主要介绍使用DDA算法： DDA算法是计算机图形学中最简单的绘制直线算法。其主要思想是由直线公式y = kx + b推导出来的。 我们已知直线段两个端点P0(x0,y0)和P1(x1,y1)，就能求...
• 如何用C语言已知两点坐标求直线方程？ 如题 求大神解答 谢谢！！！
• 编程求直线的两点式方程

千次阅读 2020-03-12 17:55:15
编程求直线两点式方程 已知直线上的两点A1(X1,Y1) A2(X2,Y2)， A1、A2两点不重合。 则直线的一般式方程AX+BY+C=0中： A = Y2 - Y1 B = X1 - X2 C = X2*Y1 - X1*Y2 即(Y2 - Y1)X + (X1 - X2)Y + ( X2*Y1 - X1*Y2) =...
• 判断点在直线的哪一侧

千次阅读 2018-07-03 22:27:23
转自：...方法1：http://zhidao.baidu.com/question/47341112.html已知P(0,0),Q(3,2)两点，试判断P,Q是否在直线2x+3y=4的同一侧。解：直线2x+3y=4即直线2x+3y-4=0把P、Q代入2x...
• ...如图已知:a、b两点的坐标, c到a的距离d 。求c点的坐标。 求 cy 可以根据d / a到b距离 = a到c垂直距离 / a 到 b的垂直距离。 首先求a到b的距离 r = sqrt((x1- x2)*(x1 - x2) +...
• 前言 Opencv4图像分割和识别实战6的视频课程...1）通过前面所学的投影分割法来分别获得这2条直线上的离散采样，然后将它们通过直线拟合求得各自的直线方程，如k1x+b和k2x+b2。...

...