두 점 사이의 각도를 찾으십시오


13

두 점을 감안할 AB라인에서 각도를 찾아 AO라인에 BO포인트에 대한 기원을 ( ). 또한, 포인트의 위치에 따라 각도가 양수 또는 음수 일 수 있습니다 (예 참조). 입력은 점이 되며 편리한 형태로 제공 될 수 있습니다. 출력은 각도로 표시됩니다 (그러나 원점을 기준으로 시계 반대 방향으로 회전 하면 양수이고 시계 방향으로 회전하면 음수). 각도가 180도이면 음수 또는 양수 출력을 반환 할 수 있습니다. 마찬가지로 각도는 동일한 각도의 양수 또는 음수 버전 일 수 있습니다 ( 와 같음 ). 예 :OO(0,0)ABAOBO90 deg-270 deg

  • 입력 : A(5,5) B(5,-5)출력 : -90( AO회전 -90각도로 회전 합니다 BO).

  • 입력 : A(5,-5) B(5,5)출력 : 90( AO회전 90각도로 회전 합니다 BO).

이것은 이므로 바이트 단위의 가장 짧은 코드가 이깁니다!


11
얼마나 정밀해야합니까?
Reto Koradi

2
입력을 두 개의 복소수로 취할 수 있습니까?
lirtosiast

5
하나의 점이 있다면 출력은 (0,0)무엇입니까?
lirtosiast

1
@ThomasKwa OP에 대해서는 모르겠지만 정수 / 10 진수 입력으로 만 처리했으며 입력에는 (0,0) 포인트가 없습니다.
GamrCorps

2
사이의 각도 : 힌트 AOBO보통 각도를 호출 할 것이다 AOB.
ETHproductions

답변:


12

Pyth, 11 바이트

.t-FPM.jMQ6

데모

입력은 다음 형식으로 제공됩니다.

[[Bx, By], [Ax, Ay]]

A가 먼저 오는 것이 바람직한 경우 1 바이트 단위로 변경할 수 있습니다.

설명:

.t-FPM.jMQ6
               Implicit: Q = eval(input())
      .jMQ     Convert input pairs to complex numbers.
    PM         Take their phases (angles in the complex plane).
  -F           Take the difference.
.t        6    Convert to degrees

22

TI-BASIC, 13 바이트

TI-83 + / 84 + 시리즈 계산기 용.

Degree
Input Y
min(ΔList(R►Pθ(Ans,∟Y

이 프로그램을 사용하려면 {x1,x2}Ans 변수를 통해 {y1,y2}프롬프트에서 목록 을 입력하십시오 .


TI-BASIC 명령이 단일 바이트입니까?
corsiKa

를 제외한 여기의 모든 명령 ΔList(은 각각 1 바이트 입니다. 이 포함됩니다 R►Pθ(.
lirtosiast

계산기 프로그래밍을 사용하기위한 +1 고등학교 시절에 Trig and Calculus로 돌아갑니다.
вʀaᴎᴅᴏƞ вєнᴎєƞ

좋은 참조! 슈퍼 쿨.
corsiKa

10

CJam, 14 바이트

q~::ma:-P/180*

[[Ax Ay] [Bx By]]STDIN 에서 입력을 읽는 전체 프로그램입니다 .

CJam 통역사 에서 온라인으로 사용해보십시오 .

작동 원리

q~             e# Read and evaluate all input.
  ::ma         e# Replace each point (x, y) with atan2(x, y).
               e# This returns its angle with the positive y axis, measured clockwise.
      :-       e# Compute the difference of the two resulting angles.
               e# This returns the angle between the points, measured counter-clockwise.
        P/180* e# Divide by Pi and multiply by 180 to convert to degrees.

5
거의 절반이 프로그램의 그냥 ... 라디안으로 변환되는 것을 즐겁게
대럴 호프만

나는 그것이 더 라디안보고에 허용되는 과제는 언어가 묶여있을 것이다 그렇다면, Pyth의 변환이 3 바이트 대신에 6 것을 즐겁게 찾을 수 @DarrelHoffman
FryAmTheEggman

5

Minkolang 0.9 , 112 바이트

나는 실제로 내장 함수로 삼각 함수를 구현하고 싶지만 이것은 재미있었습니다! (주의 : 이것은 부호있는 각도 차이가 아닌 양의 각도 차이를 출력합니다. 내 한계를 감안할 때, 그것이 정당하다고 생각합니다.)

4[n]0c2c*1c3c*+r4[2;1R]r+1R+0g*12$:;$:8[0ci2*3+d1R;0g$:1i1+[i2*1+d1+$:*]*]$+'3.141592654'25*9;$:$:12$:r-66*5**N.

여기에서 시도하십시오.

설명

누군가가 원한다면 더 자세한 설명을 게시 할 것이지만 요점은 다음과 같습니다.

4[n]                                    Take in 4 integers from input
0c2c*1c3c*+                             dot product
r4[2;1R]r+1R+0g*12$:;                   magnitudes of vectors
$:                                      dot product divided by magnitudes (z)
8[0ci2*3+d1R;0g$:1i1+             *]    Taylor series for arccos
                     [i2*1+d1+$:*]      In particular, the coefficient (1/2 * 3/4 * ...)
$+                                      Add them all up!
'3.141592654'25*9;$:$:                  Divide by pi for converting to degrees
12$:r-                                  Subtract from 1/2 - I now have arccos(z)
66*5**                                  Convert to degrees
N.                                      Output as number and stop.

minkolang은 주석을 지원합니까? 읽어보기에서 찾을 수 없습니다.
Conor O'Brien

1
@ CᴏɴᴏʀO'Bʀɪᴇɴ : 다른 2D 언어와 비슷합니다. 주석은 프로그램 카운터에서 찾을 수없는 것입니다.
El'endia Starman

아, 그럼 그것은 내가 생각했던 것을 몰라요.
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ : 답변 중 하나에 주석을 명시 적으로 사용하면 비슷한 기능을 구현하는 것을 고려할 수 있습니다. 깔끔한 아이디어이며 구현하기가 그리 어렵지 않습니다.
El'endia Starman

감사! :D(여러분이 Simplex를 위해 만든 인터프리터는 다른 "모드": 문자열 모드와 주석 모드에서 실행됩니다. 이것은 정말 구문 분석하기 쉽고 하나의 신호 문자를 무시할 수있게합니다. 다른 모드에서.)
코너 오브라이언

4

매스 매 티카, 22 바이트

{-1,1.}.ArcTan@@@#/°&

예:

In[1]:= {-1,1.}.ArcTan@@@#/°&[{{5,5},{5,-5}}]

Out[1]= -90.

In[2]:= {-1,1.}.ArcTan@@@#/°&[{{5,-5},{5,5}}]

Out[2]= 90.

입력이 작품은 같은 것{{0,1},{1,0}}
lirtosiast

@ThomasKwa 물론입니다.
alephalpha

4

자바 스크립트, 66 바이트

let f=(a,b)=>(Math.atan2(b.y,b.x)-Math.atan2(a.y,a.x))*180/Math.PI;

데모


23 초 전 = P 멋진 골프! Btw에서는을 생략 let f=해도 익명 함수로 유효한 것으로 간주됩니다.
Mwr247

3

줄리아, 18 25 바이트

f(A,B)=angle(B/A)/pi*180

이것은 "모든 편리한 형식"이 이미 복소수로 허용 A되고 B부여 될 수 있다고 가정합니다 . 그런 다음 복소수 산술 은 모든 무거운 리프팅을 수행합니다.

편집 : 스 니펫을 기능으로 변환했습니다. 18 바이트 버전은 Julia REPL에서만 작동합니다.


3

파이썬 2.7, 73 바이트

from math import*
f=lambda A,B:degrees(atan2(B[1],B[0])-atan2(A[1],A[0]))

테스트:

f((5,5),(5,-5)) #-90.0
f((5,-5),(5,5)) #90.0

PPCG에 오신 것을 환영합니다! 이것은 코드 골프이므로 가능한 한 많은 공간을 제거하고 코드를 줄이십시오.
mbomb007

1
당신은 무모 일부 추가하여 코드를 짧게 할 수 있습니다 *이야 여기 저기
FryAmTheEggman

3

옥타브, 43 바이트

f=@(a,b)(cart2pol(b)-cart2pol(a))(1)*180/pi

입출력:

octave:40> f([5,5],[5,-5])
ans = -90

octave:41> f([1,0],[0,1])
ans = 90

3

CJam, 15 바이트

l~ma@@ma-P/180*

CJam 게임에도 참여할 것이라고 생각했습니다. 온라인으로 사용해보십시오 . 입력 형식은 bx by ax ay입니다. 불행히도 이것은 Dennis의 답변을 복사하지 않고이 도전을 수행하는 가장 짧은 방법입니다.


3

티 스크립트, 28 바이트

정말 삼각 함수를 구현해야합니다 ...

$.atan2(_[3]-y,z-x)*180/$.PI

이 온라인 시도 입력이a.x a.y b.x b.y

설명

$.atan2(       // Arc Tangent of...
    _[3] - y,  // 4th input - 2nd input
       z - x,  // 3rd input - 1st input
) * 180 / $.PI // Converts rad -> deg

2

루비, 64 , 58 바이트

a=->(b){b.map{|c|Math.atan2(*c)}.reduce(:-)*180/Math::PI}

용법

a.call [[5, 5], [5, -5]] # => -90.0
a.call [[5, -5], [5, 5]] # => 90.0

2

자바 스크립트, 49 바이트

(a,b)=>((c=Math.atan2)(...b)-c(...a))/Math.PI*180

입력 형식은 다음과 같습니다 [aY, aX], [bY, bX](반전 된 x / y에 유의).


1

심플 렉스 v.0.7 , 13 바이트

나는 덧붙였다 mathrelations: D 불행히도, 포인트 입력을 취할 수 없습니다. 따라서 각 점을 별도의 숫자 (Ax, Ay, Bx, By)로 입력합니다. (나는 이것을 자원으로 사용했다.)

(iRi~^fR)2LSo
(       )2    ~~ repeat inner twice
 iRi          ~~ take two chars of input (x,y)
    ~         ~~ switch top 2 on stack
     ^f       ~~ apply atan2 on (y,x)
       R      ~~ go right
          L   ~~ go left
           S  ~~ subtract result
            o ~~ output as number

(Ay, Ax, By, Bx)로 입력 할 수 있으면 문자를 저장할 수 있습니다.

(iRi^fR)2LSo

1

C, 88 바이트

#include<math.h>
typedef double d;d g(d x,d y,d a,d b){return atan2(b-y,a-x)*180/M_PI;}

GCC 내장 수학 상수의 일부로 M_PI정의되는 이점을 활용하려면 GCC로 컴파일해야합니다 . 온라인으로 사용해보십시오 -ideone은 GCC를 사용하지 않기 때문에 (정확히) 충분한 숫자 π를 얻으려면 몇 바이트가 더 필요합니다.math.h


또는 (온라인 데모에서) 45/atan(1)대신 180/3.14159.....
CompuChip

@CompuChip 저는 온라인 데모를 최대한 활용하려고하지 않았습니다
Mego

atan2 (by, ax)에서 대괄호를 제거 할 수 있지만 리턴 후 공백이 필요하므로 1 바이트 만 저장합니다. K & R 스타일 함수를 사용할 수 있다면 double g (x, y, a, b) double x, y, a, b; 또한 6 바이트를 절약합니다.
Alchymist
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.