2012-03-22 4 views
0

I는 두 식 (거리 및 광고 화학식 기울기)안드로이드/자바 두 방정식 시스템을 해결

D = SQRT있다 ((X2 - X1)^2 + (Y2 - Y1)^2)
을 m = (Y2 - Y1)/(X2 - X1)

알려진 : d, m, X1,
Y1 알 : X2,

문제 Y2는 선형 적이되는 거리 식이다 ..

Java에서 이것을 코딩하는 방법이 있습니까 (Andro를 사용하여 ID를 호환 라이브러리) 해결할 수 있습니까? 나는 간단한 추측을 시도했지만 너무 느리다.

감사

편집 : 그것은 좋은하지 않은 0 < 1 때 코드 삼각형

 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); 

것이이 경사에 의해 발생되고 나타납니다 그래서 항상 정수입니다 .. .

+2

일치하지 않는 당신의 괄호, 당신은 의미합니까 : SQRT ((X2 - X1)^2 + (Y2 - Y1)^2) * m = (Y2-Y1)/(X2 -x1) –

+1

답변을 수락 한 후 질문을 변경하지 말고 다음에 새로운 질문을 시작하십시오 ... – kritzikratzi

+1

괜찮 았으므로 실제로 원하시는 것을 수행하는 코드가 있습니다 : http : //studio.sketchpad. cc/WjZ7UqIq4F 우주에서 오리엔테이션을 다룰 때 일반적으로 슬로프를 사용하는 것은 좋지 않습니다. 대부분의 경우 명시 적으로 모든 코너 케이스 (무한 및 제로)를 처리해야하기 때문입니다. 벡터, 즉 점, 각도 및 거리의 관점에서 생각해보십시오. 종이에 방정식을 단순화하고 결과 코드를 단순화합니다.만약 당신이 내 코드를 보았다면, pythagorean의 정리와 sinus의 근본적인 정의 외의 것을 사용하지 않는다는 것을 알 것입니다. 마지막 생각 : 변수의 이름을 지정하십시오! – kritzikratzi

답변

2

아래 대수 검토하세요

X = X2-X1

Y = Y2-Y1

이어서

m의 *의 X 정의 = y

D^2 = X^2 + m^2 * X^2 = (1 + m^2) * X^2

따라서

X = SQRT (d^2/(1 + m^2))

다음

X2 - X1 = SQRT (d^2/(1 + m^2))

그래서

X2 = SQRT (d^2/(1 + m^2) + X1

마찬가지로

Y = SQRT (d^2/(1 + m^2)) * m

Y2 = SQRT를 (d^2/(1 + m^2)) * m + Y1

그래서 응답이 :

X2 = SQRT (d^2/(1 + m^2)) + x1

y2 = sqrt (d^2/(1 + m^2)) * m + Y1은 "도서관"이라고 수학 :) 찾고있는

+0

좋아 보인다. 대단히 감사합니다! – user1154920

2

당신은 울프 람 알파 요청할 수 있습니다

: http://www.wolframalpha.com/input/?i=solve+d+%3D+sqrt%28+%28x2+-+x1%29%5E2+%2B+%28y2+-+y1%29%5E2+%29%2C+m+%3D+%28y2+-+y1%29+%2F+%28x2+-+x1%29+over+the+reals (가 X2를 알고 Y2는 인터 휴식하는 이유를 묻지 않습니다)

수 있습니다.은 손으로 그런 일을합니다. 그러나 신호를 떨어 뜨리지 않도록 매우 조심하십시오. 이 재료는 학교에서 가르치기는하지만 세부 사항에 대해서는 거의 존경하지 않습니다. 이 경우 두 가지 가능한 솔루션이 있으며 모든 경우에 d> 0인지 확인해야합니다.

First solution Second solution

+0

그래서 기본적으로 삼각형을 그리기 위해이 수식을 사용하고 있습니다. 나는 그것을 그리는 데 사용하는 코드를 보여주기 위해 제 질문을 편집했습니다. 그것은 선의 기울기가 일정량보다 작을 때를 제외하고는 잘 그립니다. 삼각형은 그려지지 않습니다. 삼각형이 그려지지 않는 이유는 무엇입니까? – user1154920

+1

음, 코드에 더 많은 문제가 있습니다. 이 대화식 버전을 사용해보십시오. http://studio.sketchpad.cc/WjZ7UqIq4F. 문제는 기본적으로 0으로 나누기 때문에 x 좌표가 정렬되면 기울기가 잘못 정의된다는 것입니다. (나는 몇 초 동안 건설적인 것을 올릴 것입니다.) – kritzikratzi

+0

새로운 질문을 게시하지 않아서 죄송합니다. 그리고 그 사실을 눈치 채고 고쳐 주셨지만, 기울기가 0 일 때 경사가 0.9 일 때 정확도 때문에 추측하고 있습니다. – user1154920

관련 문제