📄 make_funktion.cc
字号:
/********************************************************//* filename: make_funktion.cc *//* *//********************************************************//* programmed by: Oliver Wagner *//* last change: 22-03-95 *//********************************************************/#include <stdio.h>#include <stdlib.h>#include <math.h>//#include <string.h>#include <time.h>#include "daten.h"#include "vektor.h"#include "matrix.h"#include "zufall.h"DMatrix Rot (3, 3, NULL);int x_Punkte, y_Punkte;DVektor Punkt (3, 0, NULL);double Winkel, Jitter, xJitter, yJitter, x_Schritt, y_Schritt, x_Anfang, y_Anfang, x_Ende, y_Ende;int i, x, y, Index, Anzahl, Dim, Nummer, Soviel;Daten_Typ Typ;char Name[30], Was_nun;FILE *File;time_t timer;main (int argc, char *argv[]){ if (argc < 2) { printf ("Typ(0=Normal,1=Klassifiziert(=>zus.Klassennummer)),x-,y-Punktanzahl,\n"); printf ("x-,y-Anfang,x-,y-Ende,Drehung um z\n,"); printf ("Punkte gejittert oder normalverteilt(`j/n`)\n"); printf (" nach `j`: x-/y-Jitter in Prozent,\n"); printf (" ` `n`: Anzahl der Punkte um Raster-Punkt,x-/y-Varianz\n"); printf ("Grad_x,Parameter_x,Grad_y,Parameter_y,Name\n"); exit (0); } srand ((unsigned) time (&timer)); init_rand (); Index = 1; sscanf (argv[Index++], "%d", &Typ); if (Typ == Klassifiziert) sscanf (argv[Index++], "%d", &Nummer); sscanf (argv[Index++], "%d", &x_Punkte); sscanf (argv[Index++], "%d", &y_Punkte); sscanf (argv[Index++], "%lf", &x_Anfang); sscanf (argv[Index++], "%lf", &y_Anfang); sscanf (argv[Index++], "%lf", &x_Ende); sscanf (argv[Index++], "%lf", &y_Ende); sscanf (argv[Index++], "%lf", &Winkel); sscanf (argv[Index++], "%c", &Was_nun); if (Was_nun == 'j') { sscanf (argv[Index++], "%lf", &xJitter); sscanf (argv[Index++], "%lf", &yJitter); Soviel = 1; } else if (Was_nun == 'n') { sscanf (argv[Index++], "%i", &Soviel); sscanf (argv[Index++], "%lf", &xJitter); sscanf (argv[Index++], "%lf", &yJitter); } else { exit (0); } sscanf (argv[Index++], "%d", &x); DVektor funktion_x (x + 1, 0, NULL); for (y = 0; y <= x; y++) sscanf (argv[Index++], "%lf", &(funktion_x[y])); sscanf (argv[Index++], "%d", &x); DVektor funktion_y (x + 1, 0, NULL); for (y = 0; y <= x; y++) sscanf (argv[Index++], "%lf", &(funktion_y[y])); Rot = d3_zRot (Winkel); x_Schritt = x_Ende - x_Anfang; y_Schritt = y_Ende - y_Anfang; if (Was_nun == 'j') { if (x_Punkte != 1) x_Schritt /= (x_Punkte - 1); if (y_Punkte != 1) y_Schritt /= (y_Punkte - 1); } else { x_Schritt /= x_Punkte; y_Schritt /= y_Punkte; } /* Jetzt zunaechst die Datei oeffnen und Krams schreiben */ sscanf (argv[Index], "%s", Name); if (!(File = fopen (Name, "w"))) { printf ("Datei '%s' konnte nicht geoeffnet werden !\n", Name); exit (0); } switch (Typ) { case Normal: fprintf (File, "normal\n"); break; case Klassifiziert: fprintf (File, "classified\n"); break; } fprintf (File, "%d %d %d\n", Soviel * x_Punkte * y_Punkte, 2, 1); fprintf (File, "x y z\n"); /* Jetzt die Punkte erzeugen */ if (Was_nun == 'j') { xJitter = xJitter * x_Schritt / 100.0; yJitter = yJitter * y_Schritt / 100.0; for (x = 0; x < x_Punkte; x++) { for (y = 0; y < y_Punkte; y++) { Punkt[0] = x_Anfang + x * x_Schritt; Punkt[0] = Punkt[0] - (xJitter / 2.9) + xJitter * (((double) rand ()) / (double) MAXINT); Punkt[1] = y_Anfang + y * y_Schritt; Punkt[1] = Punkt[1] - (yJitter / 2.0) + yJitter * (((double) rand ()) / (double) MAXINT); Punkt[2] = funktion_x (Punkt[0]) + funktion_y (Punkt[1]); Punkt = Rot * Punkt; if (Typ == Normal) fprintf (File, "%f %f %f\n", Punkt[0], Punkt[1], Punkt[2]); else fprintf (File, "%f %f %f %d\n", Punkt[0], Punkt[1], Punkt[2], Nummer); } } } else { double z1, z2, xPos, yPos; for (x = 0; x < x_Punkte; x++) { for (y = 0; y < y_Punkte; y++) { xPos = x_Anfang + (x + 0.5) * x_Schritt; yPos = y_Anfang + (y + 0.5) * y_Schritt; for (i = 0; i < Soviel; i++) { nrand (z1, z2); /* z1 und z2 muessten jetzt (0,1) normalverteilt sein */// z1=nrand();z2=nrand(); Punkt[0] = xPos + (z1 * xJitter) * x_Schritt / 2; Punkt[1] = yPos + (z2 * yJitter) * y_Schritt / 2; Punkt[2] = funktion_x (Punkt[0]) + funktion_y (Punkt[1]); Punkt = Rot * Punkt; if (Typ == Normal) fprintf (File, "%f %f %f\n", Punkt[0], Punkt[1], Punkt[2]); else fprintf (File, "%f %f %f %d\n", Punkt[0], Punkt[1], Punkt[2], Nummer); } } } } fclose (File);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -