0 Daumen
284 Aufrufe

Frage:

Es geht um folgendes: Ich habe x und y Daten einer Autofahrt. Also Auto startet bei (0|0) nach 1 Sekunde befindet es sich auf stelle (2|-1) usw... Ich habe mir nun aus den Daten den zurückgelegten Weg als .svg Datei ausgeben lassen. Dort sehe ich nun den zurückgelegten Weg als eine Linie.

Ich möchte nun gerne meinen Code so erweitern dass in der .svg die Autofahrt simuliert wird. Also wenn ich die .svg öffne sollte die Linie jede Sekunde um den Wert x, y weiterfahren. Ist das überhaupt möglich? Falls ja wie mache ich dies?


Code:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main() {
  FILE *input_file, *svg_file;

  input_file = fopen("result.csv", "r");
  if (!input_file) {
      printf("fail to open result.csv\n");
      exit(1);
  }

  svg_file = fopen("path.svg", "w");
  if (!svg_file) {
      printf("fail to open path.svg\n");
      exit(1);
  }

  // write svg head
  const char *svg_head = "<svg xmlns='http://www.w3.org/2000/svg'><defs><rect width="10" height="10">;
  <animate attributeName="rx" values="0;5;0" dur="10s" repeatCount="indefinite" />
</rect>
</svg>\n";
  fputs(svg_head, svg_file);

  double min_x = 0.0, min_y = 0.0;

  char line[1024];
  while (fgets(line, sizeof(line), input_file)) {
      char *save = line;
      char *_x = strtok_r(line, ",", &save);
      double x = atof(_x);
      char *_y = strtok_r(NULL, ",", &save);
      double y = -atof(_y);
      if (x < min_x) min_x = x;
      if (y < min_y) min_y = y;
      fprintf(svg_file, "%f,%f\n", x, y);
  }

  // write svg tail
  const char *svg_tail = "'/></defs><use href='#line' x='%f' y='%f' fill='none' stroke='black' /></svg>";
  fprintf(svg_file, svg_tail, -min_x, -min_y);

  fclose(input_file);
  fclose(svg_file);
}

Avatar von

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community