2012-03-05 2 views
0

나는 꽤 오랫동안 머리를 숙이고있었습니다. 내가 더 젊었을 때 삼각법 수학 수업에서 더 많은 관심을 가져야 했겠지만 여기에 우리가 간다.삼각법 문제 - 각도를 사용하여 PointF 만들기

나는 각도와 점을 가지고있다. 그런 다음 첫 번째 점에서 200 단위 떨어져있는 각도 방향으로 두 번째 점을 넣기를 원합니다. 저는 Atan2를 사용하여 각도를 얻은 다음 세 번째 점을 얻기 위해 사인과 죄를 사용합니다. 하지만 ... 나는 p3을 위해 죄를 계산할 때 뭔가 잘못되었다고 생각합니다 .Y.

EDIT : 명확하게는, I는 P2를 제거하고, 직접 각을 사용했을

 PointF p1 = new PointF(20, 20); 
     double angle = 1.3034851559678624f; 

     //Create a new PointF in the same direction, 200 pixels away from p1 
     //{ X = 199,9482, Y = 4,549629 } 
     PointF p3 = new PointF 
     { 
      X = (float)(Math.Cos(Math.PI * angle/180.0) * 200), 
      Y = (float)(Math.Sin(Math.PI * angle/180.0) * 200) 
     }; 

     //This is where I would expect 1.3034851559678624 as the first angle 
     //but I get -4.9073849244837184 
     double angle2 = Math.Atan2(p3.Y - p1.Y, p3.X - p1.X) * 180/Math.PI; 

여기에 상기 값의 시각적 표현이다. 녹색 선이 첫 번째 각도입니다.

Visual overview

+1

이 어떤 점에서 그 최종 계산 기준은'X' 값을해야하지? –

+0

내 말을 듣지는 않겠지 만, 그 각도를 라디안으로 표현해야한다고 생각합니다. – neeKo

+0

@Damien_The_Unbeliever - X 지점은 어디에서 사용할 수 있습니까? – BlueVoodoo

답변

1

현재 코드의 문제는 사용자가 p1. 당신은 p3의 좌표에 p1.Xp1.Y을 추가해야합니다

PointF p3 = new PointF 
{ 
    X = p1.X + (float)(Math.Cos(Math.PI * angle/180.0) * 200), 
    Y = p1.Y + (float)(Math.Sin(Math.PI * angle/180.0) * 200) 
}; 
+0

아 물론! 감사. – BlueVoodoo

0

당신은 각도와 다음 석회질 죄/왜냐하면를 얻을 수 ATAN을 사용하지 않았다. 포인트의 좌표에서 sin과 cos를 직접 얻을 수 있습니다. P3는 당신이 전혀 삼각 함수를 사용할 필요가 없습니다 라인 P1-P2에 있어야하는데 잘 경우

http://en.wikipedia.org/wiki/Line_%28geometry%29

+0

고맙지 만 최종 코드에서는 앵글과 첫 번째 점만 갖춰서이 작업을 수행하는 방법을 이해해야합니다. – BlueVoodoo

+0

atan 표현에서 실수를 범한 것 같습니다. 각도의 완전한 표현이 아니다. 값의 범위를 찾습니다 atan. http://en.wikipedia.org/wiki/Atan2 – gabba

+0

atan을 만나면 평평한 부분을 놓칠 것 같습니다. – gabba

1

cos = (p2.x - p1.x)/length 
sin = (p2.y - p1.y)/length 
. p3의 좌표는 p1과 p2의 좌표에서 직접 찾을 수 있습니다. p1과 p2 사이의 거리가 1000 단위라고 가정합니다. 이어서 P3의 위치, P1 내지 200 개 단위이다 : 두 점 사이의 거리 (1000) 아니다

{p1.x+(p2.x-p1.x)*(200/1000),p1.y+(p2.y-p1.y)*(200/1000)} 

하면 (물론이 없을 것이다)를, 그들 사이의 Euclidean Distance하여 그 값을 대체. 여전히 직선의 기울기를 원하는 경우

당신이 비율을

계산 당신에게 1은 +45deg 각도로 원점을 통과하는 선을 나타내는 단일 번호로 기울기를 제공
(p2.y-p1.y)/(p2.x-p1.x) 

. 주변을 조금만 돌리면 기울기가 각도로 바뀝니다. 선이 수직 일 때, 즉 비율의 분모가 0 인 경우 조심하십시오.

+0

네, 문제는 최종 코드에서 각도와 PointF 만 부여된다는 것입니다. 그런 다음 두 번째 PointF 200 단위를 만드는 방법을 알아야합니다. – BlueVoodoo

+0

@BlueVoodo : 이제 질문이 더욱 혼란 스럽습니다. 귀하의 요구 사항이 무엇인지 분명히 밝히기 위해 왜 편집하지 않습니까? 다음과 같은 점 : 2D 점과 {angle, distance}가 주어지면 첫 번째 점에서부터 제거 된 점에서 두 번째 점의 {x, y} 좌표를 계산합니다. 나는 당신이 3 점을 전혀 가지고 있지 않은 이유를 알 수 없다. 당신은 확실히 나를 혼란스럽게 만들었습니다. 나는 당신이 질문을 편집 한 후에 다시 돌아와서 다른 모습을 보일 것입니다. –

+0

혼란을 가져 주어서 죄송합니다. 더 명확한 설명을 위해 제 의견을 편집했습니다. 필자는 단순히 P2를 사용하여 각도를 얻었고 내 이미지에서이를 시각적으로 나타낼 수있었습니다. – BlueVoodoo

관련 문제