2017-01-07 5 views
-5

정확도는 약 0.000001입니다. 여기 sinl과 cosl의 정확도는 C++에서

typedef struct p { 

    long double x; 
    long double y; 

}point; 

point rotate_point(long double cx,long double cy,long double angle,point p) //pivot then angle then point to rotate 
{ // cout<<"\ncx="<<cx<<"cy="<<cy<<"x="<<p.x<<"y="<<p.y; 
    angle=(angle/100)*pi*2; 


    // translate point back to origin: 
    p.x -= cx; 
    p.y -= cy; 
    cout.setf(ios::fixed); 
cout.setf(ios::showpoint); 
cout.precision(20); 

    // rotate point 
    long double xnew = p.x * cosl(-angle) - p.y * sinl(-angle); 
    long double ynew = p.x * sinl(-angle) + p.y * cosl(-angle); 

    // translate point back: 
    p.x = xnew + cx; 
    p.y = ynew + cy; 
    cout<<"x="<<p.x<<"y="<<p.y; 
    return p; 
} 

제가 여기 주어진 피벗 cx, cy가 회동이 약 점을 회전시키는 기능 rotate_point 사용하고 사용하고있는 코드 세그먼트이다 point는 시계 방향으로 회전하는 지점 angle이며 는 각도로 전달 된 각도입니다 (라디안 단위로 전달할 수 없습니다). 내 문제는 값으로 함수를 호출 할 때입니다 rotate_point(50,50,25, p) p.x=50 p.y=100 다음 예상 된 출력은 x=100 y=50입니다.

나는 x=99.99999000666841262458 y=49.96838777042233631365을 얻고 있습니다. x은 정확하지만 y은 원하는 정확도 범위에 없습니다. 당신이 정확성을 원하는 경우

+0

[규칙] (https://www.facebook.com/hackercup/terms/)이 [문제] (https : //www.facebook .com/hackercup/problem/1254819954559001 /) ?! –

+0

'angle = (angle/100) * pi * 2;는 무엇을해야합니까? 라디안 변환 정도는 아니지만 비슷합니다. '파이 '란 무엇입니까? 아마도 당신은'pi = 3.142' 또는 다른 crass 값을 가질 것입니다. 수학 라이브러리 헤더에 정의 된 값을 사용하십시오. –

+0

pi는 #define pi (22/7)이고 실제도는 라디안 변환입니다. (angle/100) * pi * (360/180) –

답변

-1

는 값을

pi = 22/7 

를 사용하지 마십시오.

M_PI 

math.h으로 정의됩니다. 또한 MSVC에서 다음 값을 사용할 수 있도록

#define _USE_MATH_DEFINES 

을 사용해야합니다.

#define M_E  2.71828182845904523536 // e 
#define M_LOG2E 1.44269504088896340736 // log2(e) 
#define M_LOG10E 0.434294481903251827651 // log10(e) 
#define M_LN2  0.693147180559945309417 // ln(2) 
#define M_LN10  2.30258509299404568402 // ln(10) 
#define M_PI  3.14159265358979323846 // pi 
#define M_PI_2  1.57079632679489661923 // pi/2 
#define M_PI_4  0.785398163397448309616 // pi/4 
#define M_1_PI  0.318309886183790671538 // 1/pi 
#define M_2_PI  0.636619772367581343076 // 2/pi 
#define M_2_SQRTPI 1.12837916709551257390 // 2/sqrt(pi) 
#define M_SQRT2 1.41421356237309504880 // sqrt(2) 
#define M_SQRT1_2 0.707106781186547524401 // 1/sqrt(2) 
관련 문제