2014-09-08 3 views
0

나는 장방형 모양의 장애물이 가득한 코드를 작성하고 있습니다. 원이되는 나의 로봇은 세계의 어느 곳에서나 무작위로 생겨납니다. 나는 그것의 머리에 거리 센서가 있고 그 직선에있는 가장 가까운 장애물/경계 벽 사이의 거리를 원한다고 가정합니다.장애물로부터 거리를 알아내는 방법을 알아내는 방법

0도에서 360도 사이의 무작위 방향을 사용하여 로봇의 방향을 지정하고 죄와 코사인 방향을 사용하여 동일한 방향으로 로봇을 움직입니다. 그러나이 방위를 따라 어떤 장애물이나 경계벽 사이의 거리를 어떻게 얻을 수 있습니까? 0에서 360 사이의 각도가 될 수있는 시력에서 처음 만나는 물체의 거리를 말해 줄 수 있어야합니다.

이 문제가 발생하는 방법에 대한 논리를 제게 알려주십시오.

감사

+0

방향/시야각 내에서 물체를 식별하는 방법을 묻습니다. 또는 2 점 사이의 거리를 계산하는 방법을 알고 싶습니까? – JSlain

+0

@JSlain 첫 번째 장애물과의 거리를 알고 싶거나 시각 장애가없는 경계벽이 있다면 – Ambidextrous

답변

1

당신이 각도를 알고 가정, 로봇의 위치와 모든 장애물의 위치, 당신은이 같은 기능을 할 수 :

  • 각도 경우 경우 미만 90 이상 270을 사용하면 x 좌표가 1 씩 증가합니다. 그렇지 않으면 1 씩 감소합니다.
  • 현재 x 좌표에서부터 세계 가장자리까지 (for 당신은 세상 구현 방법을 모르겠습니다), for 위치 장애물 (x, x * tan (angle)), 다음에 따라 증가 또는 감소
  • 당신이에서 실행하는 첫 번째 장애물, 반환 SQRT 위의 단계 (X^2 + (X * 황갈색 (각도))^2) - 그 내가 당신을 생각하는 바로 피타고라스의 정리 여기
0

것입니다 할 수있어. 실제 게임 개발에서 그들은 많은 최적화 트릭을 사용하며 종종 더 나은 성능을 제공합니다. 또한 게임 개발을위한 많은 라이브러리가 있습니다. 아마 당신이 원하는 것을 쉽게 얻을 수 있습니다.

하지만 어쨌든, 여기에 내가 한 일이 있습니다.

  1. 앞으로 나아갈 경우 지나갈 물건을 식별하십시오.
  2. 방금 ​​만든 개체 목록에서 가장 가까운 것을 식별하십시오.

1

A)

  • 형태의 예에서 위치/각 = MX + B
  • [Y = 황갈색 (각도에 대한 식을) X + (positionY - (황갈색 (각도) * X))]

B)

  • 각 개체에 대해 여러 줄 세그먼트 (2 포인트)로 개체를 나눕니다.세그먼트는 점에서하기 화학식으로 이루어진 선을 교차하는 경우

  • 체크

  • 는 동일 할 (a 점이 작고 다른 식 동일한 X 값보다 큰 경우에는 건너 'S) 당신의 세계 경계

2 일 : This part is more tricky (to do in programmation).

다음으로, 당신은 당신의 로봇 방향 공식은 이전에 식별 할 수있는 모든 라인 교차 위치를 찾을 수있다.

각 라인에 대한

, 다시 = MX + B 하자 우리가이 말을 바깥으로 라인을 설정해야합니다 :

y=3x+5 and 
y=5x+1 

3x+5 = 5x+1 
3x-5x = 1-5 
-2x = -4 
x  = 2 

그런 다음 중 하나를 수식에 2 X를 대체, 당신은 교차점을 얻을 것이다 :

y = 3(2)+5 = 11 
y = 5(2)+1 = 11 

그래서이 두 선은 그 지점이 있는지 확인해야

다음 (2, 11) 점 에 교차 당신의 domain에서 로봇 경로 공식입니다.

로봇이 한 방향을보고 있으므로 1.A에서 만든 수식이 양방향 모두 무한대이므로 로봇이 움직이지 않는 한 찾은 선 교차점이 로봇의 뒷면에 있지 않도록해야합니다 뒤로 ...)

당신은 로봇의 왼쪽에있는 경우 cos (angle) 기호를보고 교점의 위치를보고 cos (angle)을 간단하게 만들 수 있다고 생각합니다. 부정적이다. 괜찮아. 마지막으로

, 당신은 모든 교차 지점을 발견하면

, 당신은 피타고라스의 정리 SQRT를 사용하여 가장 가까운을 찾을 수 있습니다 ((X1-X2)^2 + (Y1-Y2)^2)

또한 tan (90)이 없기 때문에 90 및 270도 각도에서 작동하지 않습니다.

그런 경우 세그먼트의 두 점이 모두 로봇의 양면에 있고 교점이 올바른 방향으로 있는지 살펴 보는 것만으로 통과하는 것입니다.

다시 말하지만, 최적화를위한 많은 공간이 있습니다.

관련 문제