이 주제에 대한 다른 질문이 있습니다. 위키 피 디아 및 다른 기사와 함께 대부분 읽었을 것으로 생각되지만 일부 간단한 산술 내 좌표 계산을 완료하십시오.스크린상의 좌표 계산
이 코드는 다음과 같습니다.
typedef struct {
double startX;
double startY;
double x2;
double y2;
double length;
double angle;
double lastAngle;
} LINE;
void lineCalc(LINE *lp) {
double radians = lp->angle * 3.141592653589793/180.0;
lp->x2 = lp->startX + (lp->length * cos(radians));
lp->y2 = lp->startY + (lp->length * sin(radians));
fprintf (stderr, "lineCalc:startX:%2.3f, startY:%2.3f, length:%2.3g, angle:%2.3f, cos(%2.3f):%2.3f, x2:%2.3f, y2:%2.3f\n", lp->startX, lp->startY, lp->length, lp->angle, lp->angle, cos(radians), lp->x2, lp->y2);
}
int main() {
// Initialise to origin of 250, 250. 0, 0 for initial end point. Length 150, first angle 60 (degrees), l.lastAngle currently not used
LINE l = {250, 250, 0, 0, 150, 60, 0};
lineCalc(&l);
//drawLine(&l);
l.startX = x2; l.startY = y2; // make last end point, new start point. Angle stays at 60 degrees
lineCalc(&l);
//drawLine(&l);
l.startX = x2; l.startY = y2;
lineCalc(&l);
//drawLine(&l);
}
시작점, 길이 및 각도가 지정된 줄의 끝점을 계산합니다. 모두 좋고 좋지만, 할 수 있기를 원하는 것은 모양을 그리는 것입니다. 삼각형이 시작일 것입니다. 코드는 다음 라인 등을 그릴, 계산, (실제로는 SVG를 생성하는) 선을 그어야, 계산을 마지막 끝점을 다음 원산지를 만들 것입니다 순간
...
내가 빠뜨린 가장 중요한 점은 그려지는 마지막 선에 비례하여 각도를 얻는 방법이다. 이때 원점의 이동은 정상적으로 작동하지만 각도는 동일하게 유지되므로 각도가 마지막 선과 관련되지 않고 시작과 관련되기 때문에 각도가 60 도인 세 개의 선은 직선을 그립니다.
관련성이있는 경우 SVG 가로가 0도입니다. 따라서 y100에서 시작하는 50 단위 길이의 선, 90도 각도의 x100은 종점이 y150, x100입니다.
누군가가 분명한 점을 지적하여 마지막 줄에 상대적으로 정확한 각도를 만들 수 있습니까?
신속하고 정확한 답변을 보내 주셔서 감사합니다. 이제 임의의 각도와 다른 모양 (또는 적어도 시도한 몇 가지 모양)에서 작동합니다. – blankabout