【发布时间】:2012-03-22 17:45:43
【问题描述】:
我有两个方程(直线公式的距离和斜率)
d = sqrt( (x2 - x1)^2 + (y2 - y1)^2 )
m = (y2 - y1) / (x2 - x1)
已知:d、m、x1、y1
未知:x2,y2
问题是距离方程不是线性的......
有没有办法在java中编码(使用Android兼容库)来解决?我试着做简单的猜测,但它太慢了。
谢谢
编辑:三角形代码
Point p1 = new Point();
Point p2 = new Point();
projection.toPixels(gp1, p1);
projection.toPixels(gp2, p2);
Point p3 = new Point();
double slope = (p2.y - p1.y) / (p2.x - p1.x);
double x = 0;
if (p2.y - p1.y >= 0 && p2.x - p1.x >= 0) {
x = - Math.sqrt(600 / (1 + slope*slope)) + p2.x;
} else if (p2.y - p1.y >= 0 && p2.x - p1.x < 0) {
x = Math.sqrt(600 / (1 + slope*slope)) + p2.x;
} else if (p2.y - p1.y < 0 && p2.x - p1.x >= 0) {
x = - Math.sqrt(600 / (1 + slope*slope)) + p2.x;
} else if (p2.y - p1.y < 0 && p2.x - p1.x < 0) {
x = Math.sqrt(600 / (1 + slope*slope)) + p2.x;
}
double y = -slope*p2.x + slope*x + p2.y;
p3.set((int) x, (int) y);
double inverseSlope = 0;
if (slope == 0) {
inverseSlope = Double.MAX_VALUE;
} else {
inverseSlope = -1 / slope;
}
x = -Math.sqrt(300 / (1 + inverseSlope*inverseSlope)) + p3.x;
y = -Math.sqrt(300 / (1 + inverseSlope*inverseSlope))*inverseSlope + p3.y;
Point p4 = new Point();
p4.set((int) x, (int) y);
x = Math.sqrt(300 / (1 + inverseSlope*inverseSlope)) + p3.x;
y = Math.sqrt(300 / (1 + inverseSlope*inverseSlope))*inverseSlope + p3.y;
Point p5 = new Point();
p5.set((int)x, (int) y);
Path path = new Path();
path.moveTo(p2.x, p2.y);
path.lineTo(p4.x, p4.y);
path.moveTo(p4.x, p4.y);
path.lineTo(p5.x, p5.y);
path.moveTo(p5.x, p5.y);
path.lineTo(p2.x, p2.y);
path.moveTo(p2.x, p2.y);
canvas.drawPath(path, mPaint);
看起来它是由斜率引起的,它总是一个整数,所以当它
【问题讨论】:
-
你的括号不匹配,你的意思是:sqrt((x2 - x1)^2 + (y2 - y1)^2) * m = (y2-y1)/(x2 -x1 )
-
请不要在接受答案后更改您的问题,下次重新开始一个新问题...
-
好的,所以这里有一些代码可以满足您的实际需求:studio.sketchpad.cc/WjZ7UqIq4F 当您处理空间中的方向时,使用坡度通常是个坏主意,因为您必须处理所有角落大多数情况下(无限和零)明确。用向量来思考——即点、角度和距离——而不是。它将简化您在纸上的方程式和生成的代码。如果您查看我的代码,您会发现它除了勾股定理和鼻窦的基本定义之外没有使用任何东西。最后的想法:命名你的变量!
-
非常感谢 - 很高兴知道。