我知道有關於這個主題的其他問題的負載,我想我已經閱讀了大部分,連同維基百科和一堆其他文章,但我錯過了(我認爲)一些簡單的算術完成我的座標計算。計算座標在屏幕上
我有這樣的代碼:
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水平是零度。因此,從y100開始,長度爲50單位的線,在90度角處的x100將具有y150,x100的結束點。
有人能指出一個明顯的事情,我錯過了,使角度正確的相對最後一行嗎?
感謝您提供快速準確的答覆。它現在適用於任意角度和其他形狀(或者至少我嘗試過的幾個)。 – blankabout