#include
#include
#include
#include
typedef struct {
float x, y;
} Plot;
FILE *file;
char* color;
const float r = 20;
typedef struct TreeNode {
char* name;
int val;
struct TreeNode** child;
int childCount;
} TreeNode;
TreeNode* treeNodeInit(char* name, int val) {
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
node->name = strdup(name);
node->val = val;
node->child = NULL;
node->childCount = 0;
return node;
}
void treeNodeAddChild(TreeNode* parent, TreeNode* child) {
parent->childCount++;
parent->child = (TreeNode**)realloc(parent->child, sizeof(TreeNode*) * parent->childCount);
parent->child[parent->childCount - 1] = child;
}
void treeNodeFree(TreeNode* node) {
if (node == NULL) {
return;
}
for (int i = 0; i < node->childCount; i++) {
treeNodeFree(node->child[i]);
}
free(node->child);
free(node->name);
free(node);
}
typedef struct {
Plot** data;
int* lengthArray;
int size;
int capacity;
} PlotVector;
PlotVector* plotVector;
void plotVectorInit() {
plotVector = (PlotVector*)malloc(sizeof(PlotVector));
plotVector->data = NULL;
plotVector->lengthArray = NULL;
plotVector->size = 0;
plotVector->capacity = 0;
}
void plotVectorFree() {
free(plotVector->lengthArray);
free(plotVector->data);
free(plotVector);
}
void plotVectorPushBack(Plot* plot, int sizeofPlotVector) {
if (plotVector->size >= plotVector->capacity) {
int newCapacity = (plotVector->capacity == 0) ? 1 : plotVector->capacity * 2;
Plot** newData = (Plot**)realloc(plotVector->data, newCapacity * sizeofPlotVector);
int* newLengthArray = (int*)realloc(plotVector->lengthArray, newCapacity * sizeof(int));
if (newData == NULL) {
printf("Memory allocation failed.\n");
return;
}
plotVector->data = newData;
plotVector->capacity = newCapacity;
plotVector->lengthArray = newLengthArray;
}
plotVector->data[plotVector->size] = plot;
plotVector->lengthArray[plotVector->size] = sizeofPlotVector;
plotVector->size++;
}
void QBcurvePrint(int index) {
if (index < 0 || index >= plotVector->size) {
printf("Invalid index.\n");
return;
}
Plot* plots = plotVector->data[index];
int i = 0;
float theta0, theta1 = atanf((plots[i + 1].y - plots[i].y) / (plots[i + 1].x - plots[i].x));
fprintf(file, "lengthArray[index] / sizeof(Plot) - 2) {
i++;
theta0 = theta1;
theta1 = atanf((plots[i + 1].y - plots[i].y) / (plots[i + 1].x - plots[i].x));
fprintf(file, "L %f %f Q %f %f %f %f ",
plots[i].x + r * cosf(theta0 + M_PI), plots[i].y + r * sinf(theta0 + M_PI),
plots[i].x, plots[i].y,
plots[i].x + r * cosf(theta1), plots[i].y + r * sinf(theta1));
}
fprintf(file, "L %f %f\" stroke=\"%s\" stroke-width=\"2\" fill=\"none\" />\n", plots[i + 1].x, plots[i + 1].y, color);
}
int main() {
plotVectorInit();
file = fopen("output.svg", "w");
if (file == NULL) {
printf("Can not open SVG file.\n");
return 1;
}
fprintf(file, "\n");
fclose(file);
plotVectorFree();
return 0;
}
标签: