⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 make_funktion.cc

📁 UNIX下使用的基于模糊C聚类分析的原码
💻 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 + -