您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ Graphics_drawInnerBox函数代码示例

51自学网 2021-06-01 21:19:34
  C++
这篇教程C++ Graphics_drawInnerBox函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中Graphics_drawInnerBox函数的典型用法代码示例。如果您正苦于以下问题:C++ Graphics_drawInnerBox函数的具体用法?C++ Graphics_drawInnerBox怎么用?C++ Graphics_drawInnerBox使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了Graphics_drawInnerBox函数的30个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: GaussianMixture_and_PCA_drawConcentrationEllipses

void GaussianMixture_and_PCA_drawConcentrationEllipses (GaussianMixture me, PCA him, Graphics g, double scale,	int confidence, wchar_t *label, long d1, long d2,	double xmin, double xmax, double ymin, double ymax, int fontSize, int garnish){	if (my dimension != his dimension) { Melder_warning1 (L"Dimensions don't agree."); return;}	SSCPs thee = NULL;	int d1_inverted = 0, d2_inverted = 0;	if (d1 < 0) { d1 = abs(d1); Eigen_invertEigenvector (him, d1); d1_inverted = 1; }	if (d2 < 0) { d2 = abs(d2); Eigen_invertEigenvector (him, d2); d2_inverted = 1; }	if ((thee = SSCPs_toTwoDimensions ((SSCPs) my covariances, his eigenvectors[d1], his eigenvectors[d2])) == NULL) goto end;	if (d1_inverted) Eigen_invertEigenvector (him, d1);	if (d2_inverted) Eigen_invertEigenvector (him, d2);	SSCPs_drawConcentrationEllipses (thee, g, -scale, confidence, label, 1, 2,		xmin, xmax, ymin, ymax, fontSize, 0);	if (garnish)	{		wchar_t label[40];    	Graphics_drawInnerBox (g);    	Graphics_marksLeft (g, 2, 1, 1, 0);    	swprintf (label, 40, L"pc %ld", d2);    	Graphics_textLeft (g, 1, label);    	Graphics_marksBottom (g, 2, 1, 1, 0);    	swprintf (label, 40, L"pc %ld", d1);		Graphics_textBottom (g, 1, label);	}end:	forget (thee);}
开发者ID:alekstorm,项目名称:tala,代码行数:33,


示例2: Formant_drawTracks

void Formant_drawTracks (Formant me, Graphics g, double tmin, double tmax, double fmax, int garnish) {	long itmin, itmax, ntrack = Formant_getMinNumFormants (me);	if (tmax <= tmin) { tmin = my xmin; tmax = my xmax; }	if (! Sampled_getWindowSamples (me, tmin, tmax, & itmin, & itmax)) return;	Graphics_setInner (g);	Graphics_setWindow (g, tmin, tmax, 0.0, fmax);	for (long itrack = 1; itrack <= ntrack; itrack ++) {		for (long iframe = itmin; iframe < itmax; iframe ++) {			Formant_Frame curFrame = & my d_frames [iframe], nextFrame = & my d_frames [iframe + 1];			double x1 = Sampled_indexToX (me, iframe), x2 = Sampled_indexToX (me, iframe + 1);			double f1 = curFrame -> formant [itrack]. frequency;			double f2 = nextFrame -> formant [itrack]. frequency;			if (NUMdefined (x1) && NUMdefined (f1) && NUMdefined (x2) && NUMdefined (f2))				Graphics_line (g, x1, f1, x2, f2);		}	}	Graphics_unsetInner (g);	if (garnish) {		Graphics_drawInnerBox (g);		Graphics_textBottom (g, 1, U"Time (s)");		Graphics_textLeft (g, 1, U"Formant frequency (Hz)");		Graphics_marksBottom (g, 2, 1, 1, 0);		Graphics_marksLeftEvery (g, 1.0, 1000.0, 1, 1, 1);	}}
开发者ID:psibre,项目名称:praat,代码行数:25,


示例3: FilterBank_paint

void FilterBank_paint (FilterBank me, Graphics g, double xmin, double xmax, double ymin, double ymax, double minimum, double maximum, int garnish) {	if (xmax <= xmin) {		xmin = my xmin; xmax = my xmax; 	}	if (ymax <= ymin) {		ymin = my ymin; ymax = my ymax;	}	long ixmin, ixmax, iymin, iymax;	(void) Matrix_getWindowSamplesX (me, xmin - 0.49999 * my dx, xmax + 0.49999 * my dx, &ixmin, &ixmax);	(void) Matrix_getWindowSamplesY (me, ymin - 0.49999 * my dy, ymax + 0.49999 * my dy, &iymin, &iymax);	if (maximum <= minimum) {		(void) Matrix_getWindowExtrema (me, ixmin, ixmax, iymin, iymax, &minimum, &maximum);	}	if (maximum <= minimum) { 		minimum -= 1.0; maximum += 1.0;	}	if (xmin >= xmax || ymin >= ymax) {		return;	}	Graphics_setInner (g);	Graphics_setWindow (g, xmin, xmax, ymin, ymax);	Graphics_image (g, my z,			ixmin, ixmax, Sampled_indexToX   (me, ixmin - 0.5), Sampled_indexToX   (me, ixmax + 0.5),			iymin, iymax, SampledXY_indexToY (me, iymin - 0.5), SampledXY_indexToY (me, iymax + 0.5),			minimum, maximum);	Graphics_unsetInner (g);	if (garnish) {		Graphics_drawInnerBox (g);		Graphics_marksLeft (g, 2, 1, 1, 0);		Graphics_textLeft (g, 1, GetFreqScaleText (my v_getFrequencyScale ()));		Graphics_marksBottom (g, 2, 1, 1, 0);		Graphics_textBottom (g, 1, U"Time (s)");	}}
开发者ID:psibre,项目名称:praat,代码行数:35,


示例4: Formant_scatterPlot

void Formant_scatterPlot (Formant me, Graphics g, double tmin, double tmax,	int iformant1, double fmin1, double fmax1, int iformant2, double fmin2, double fmax2,	double size_mm, const char32 *mark, int garnish){	if (iformant1 < 1 || iformant2 < 1) return;	if (tmax <= tmin) { tmin = my xmin; tmax = my xmax; }	long itmin, itmax;	if (! Sampled_getWindowSamples (me, tmin, tmax, & itmin, & itmax)) return;	if (fmax1 == fmin1)		Formant_getExtrema (me, iformant1, tmin, tmax, & fmin1, & fmax1);	if (fmax1 == fmin1) return;	if (fmax2 == fmin2)		Formant_getExtrema (me, iformant2, tmin, tmax, & fmin2, & fmax2);	if (fmax2 == fmin2) return;	Graphics_setInner (g);	Graphics_setWindow (g, fmin1, fmax1, fmin2, fmax2);	for (long iframe = itmin; iframe <= itmax; iframe ++) {		Formant_Frame frame = & my d_frames [iframe];		if (iformant1 > frame -> nFormants || iformant2 > frame -> nFormants) continue;		double x = frame -> formant [iformant1]. frequency;		double y = frame -> formant [iformant2]. frequency;		if (x == 0.0 || y == 0.0) continue;		Graphics_mark (g, x, y, size_mm, mark);	}	Graphics_unsetInner (g);	if (garnish) {		Graphics_drawInnerBox (g);		Graphics_textBottom (g, 1, Melder_cat (U"%%F_", iformant1, U" (Hz)"));		Graphics_textLeft (g, 1, Melder_cat (U"%%F_", iformant2, U" (Hz)"));		Graphics_marksBottom (g, 2, 1, 1, 0);		Graphics_marksLeft (g, 2, 1, 1, 0);	}}
开发者ID:psibre,项目名称:praat,代码行数:33,


示例5: Minimizer_drawHistory

void Minimizer_drawHistory (Minimizer me, Graphics g, long iFrom, long iTo, double hmin, double hmax, int garnish) {	if (! my history) {		return;	}	if (iTo <= iFrom) {		iFrom = 1; iTo = my iteration;	}	long itmin = iFrom, itmax = iTo;	if (itmin < 1) {		itmin = 1;	}	if (itmax > my iteration) {		itmax = my iteration;	}	if (hmax <= hmin) {		NUMvector_extrema (my history, itmin, itmax, & hmin, & hmax);	}	if (hmax <= hmin) {		hmin -= 0.5 * fabs (hmin);		hmax += 0.5 * fabs (hmax);	}	Graphics_setInner (g);	Graphics_setWindow (g, iFrom, iTo, hmin, hmax);	Graphics_function (g, my history, itmin, itmax, itmin, itmax);	Graphics_unsetInner (g);	if (garnish) {		Graphics_drawInnerBox (g);		Graphics_textBottom (g, true, U"Number of iterations");		Graphics_marksBottom (g, 2, true, true, false);		Graphics_marksLeft (g, 2, true, true, false);	}}
开发者ID:jjatria,项目名称:praat,代码行数:32,


示例6: Pattern_draw

void Pattern_draw (Pattern me, Graphics g, long pattern, double xmin, double xmax, double ymin, double ymax, int garnish) {	Matrix_drawRows (me, g, xmin, xmax, pattern - 0.5, pattern + 0.5, ymin, ymax);	if (garnish) {		Graphics_drawInnerBox (g);		Graphics_marksBottom (g, 2, true, true, false);		Graphics_marksLeft (g, 2, true, true, false);	}}
开发者ID:nullpunktTUD,项目名称:praat,代码行数:8,


示例7: FormantFilter_drawFilterFunctions

void FormantFilter_drawFilterFunctions (FormantFilter me, Graphics g, double bandwidth,                                        int toFreqScale, int fromFilter, int toFilter, double zmin, double zmax,                                        int dbScale, double ymin, double ymax, int garnish) {	if (! checkLimits (me, FilterBank_HERTZ, toFreqScale, & fromFilter, & toFilter,	                   & zmin, & zmax, dbScale, & ymin, & ymax)) {		return;	}	if (bandwidth <= 0) {		Melder_warning (U"Bandwidth must be greater than zero.");	}	long n = 1000;	autoNUMvector<double>a (1, n);	Graphics_setInner (g);	Graphics_setWindow (g, zmin, zmax, ymin, ymax);	for (long j = fromFilter; j <= toFilter; j++) {		double df = (zmax - zmin) / (n - 1);		double fc = my y1 + (j - 1) * my dy;		long ibegin, iend;		for (long i = 1; i <= n; i++) {			double f = zmin + (i - 1) * df;			double z = scaleFrequency (f, toFreqScale, FilterBank_HERTZ);			if (z == NUMundefined) {				a[i] = NUMundefined;			} else {				a[i] = NUMformantfilter_amplitude (fc, bandwidth, z);				if (dbScale) {					a[i] = to_dB (a[i], 10, ymin);				}			}		}		setDrawingLimits (a.peek(), n, ymin, ymax,	&ibegin, &iend);		if (ibegin <= iend) {			double fmin = zmin + (ibegin - 1) * df;			double fmax = zmax - (n - iend) * df;			Graphics_function (g, a.peek(), ibegin, iend, fmin, fmax);		}	}	Graphics_unsetInner (g);	if (garnish) {		double distance = dbScale ? 10 : 1;		char32 const *ytext = dbScale ? U"Amplitude (dB)" : U"Amplitude";		Graphics_drawInnerBox (g);		Graphics_marksBottom (g, 2, 1, 1, 0);		Graphics_marksLeftEvery (g, 1, distance, 1, 1, 0);		Graphics_textLeft (g, 1, ytext);		Graphics_textBottom (g, 1, GetFreqScaleText (toFreqScale));	}}
开发者ID:psibre,项目名称:praat,代码行数:58,


示例8: MelFilter_drawFilterFunctions

void MelFilter_drawFilterFunctions (MelFilter me, Graphics g,                                    int toFreqScale, int fromFilter, int toFilter, double zmin, double zmax,                                    int dbScale, double ymin, double ymax, int garnish) {	if (! checkLimits (me, FilterBank_MEL, toFreqScale, & fromFilter, & toFilter,	                   & zmin, & zmax, dbScale, & ymin, & ymax)) {		return;	}	long n = 1000;	autoNUMvector<double> a (1, n);	Graphics_setInner (g);	Graphics_setWindow (g, zmin, zmax, ymin, ymax);	for (long j = fromFilter; j <= toFilter; j++) {		double df = (zmax - zmin) / (n - 1);		double fc_mel = my y1 + (j - 1) * my dy;		double fc_hz = MELTOHZ (fc_mel);		double fl_hz = MELTOHZ (fc_mel - my dy);		double fh_hz = MELTOHZ (fc_mel + my dy);		long ibegin, iend;		for (long i = 1; i <= n; i++) {			// Filterfunction: triangular on a linear frequency scale AND a linear amplitude scale.			double f = zmin + (i - 1) * df;			double z = scaleFrequency (f, toFreqScale, FilterBank_HERTZ);			if (z == NUMundefined) {				a[i] = NUMundefined;			} else {				a[i] = NUMtriangularfilter_amplitude (fl_hz, fc_hz, fh_hz, z);				if (dbScale) {					a[i] = to_dB (a[i], 10, ymin);				}			}		}		setDrawingLimits (a.peek(), n, ymin, ymax,	&ibegin, &iend);		if (ibegin <= iend) {			double fmin = zmin + (ibegin - 1) * df;			double fmax = zmax - (n - iend) * df;			Graphics_function (g, a.peek(), ibegin, iend, fmin, fmax);		}	}	Graphics_unsetInner (g);	if (garnish) {		double distance = dbScale ? 10 : 1;		char32 const *ytext = dbScale ? U"Amplitude (dB)" : U"Amplitude";		Graphics_drawInnerBox (g);		Graphics_marksBottom (g, 2, 1, 1, 0);		Graphics_marksLeftEvery (g, 1, distance, 1, 1, 0);		Graphics_textLeft (g, 1, ytext);		Graphics_textBottom (g, 1, GetFreqScaleText (toFreqScale));	}}
开发者ID:psibre,项目名称:praat,代码行数:57,


示例9: FilterBank_drawFrequencyScales

void FilterBank_drawFrequencyScales (I, Graphics g, int horizontalScale, double xmin,                                     double xmax, int verticalScale, double ymin, double ymax, int garnish) {	iam (FilterBank);	int myFreqScale = FilterBank_getFrequencyScale (me);	if (xmin < 0 || xmax < 0 || ymin < 0 || ymax < 0) {		Melder_warning (U"Frequencies must be >= 0.");		return;	}	if (xmin >= xmax) {		double xmint = my ymin;		double xmaxt = my ymax;		if (ymin < ymax) {			xmint = scaleFrequency (ymin, verticalScale, myFreqScale);			xmaxt = scaleFrequency (ymax, verticalScale, myFreqScale);		}		xmin = scaleFrequency (xmint, myFreqScale, horizontalScale);		xmax = scaleFrequency (xmaxt, myFreqScale, horizontalScale);	}	if (ymin >= ymax) {		ymin = scaleFrequency (xmin, horizontalScale, verticalScale);		ymax = scaleFrequency (xmax, horizontalScale, verticalScale);	}	long n = 2000;	autoNUMvector<double> a (1, n);	Graphics_setInner (g);	Graphics_setWindow (g, xmin, xmax, ymin, ymax);	double df = (xmax - xmin) / (n - 1);	for (long i = 1; i <= n; i++) {		double f = xmin + (i - 1) * df;		a[i] = scaleFrequency (f, horizontalScale, verticalScale);	}	long ibegin, iend;	setDrawingLimits (a.peek(), n, ymin, ymax,	& ibegin, & iend);	if (ibegin <= iend) {		double fmin = xmin + (ibegin - 1) * df;		double fmax = xmax - (n - iend) * df;		Graphics_function (g, a.peek(), ibegin, iend, fmin, fmax);	}	Graphics_unsetInner (g);	if (garnish) {		Graphics_drawInnerBox (g);		Graphics_marksLeft (g, 2, 1, 1, 0);		Graphics_textLeft (g, 1, GetFreqScaleText (verticalScale));		Graphics_marksBottom (g, 2, 1, 1, 0);		Graphics_textBottom (g, 1, GetFreqScaleText (horizontalScale));	}}
开发者ID:psibre,项目名称:praat,代码行数:56,


示例10: PowerCepstrogram_paint

void PowerCepstrogram_paint (PowerCepstrogram me, Graphics g, double tmin, double tmax, double qmin, double qmax, double dBmaximum, int autoscaling, double dynamicRangedB, double dynamicCompression, int garnish) {	if (tmax <= tmin) { tmin = my xmin; tmax = my xmax; }	if (qmax <= qmin) { qmin = my ymin; qmax = my ymax; }	long itmin, itmax, ifmin, ifmax;	if (! Matrix_getWindowSamplesX (me, tmin - 0.49999 * my dx, tmax + 0.49999 * my dx, & itmin, & itmax) ||		 ! Matrix_getWindowSamplesY (me, qmin - 0.49999 * my dy, qmax + 0.49999 * my dy, & ifmin, & ifmax)) {		return;	}	autoMatrix thee = Data_copy (me);	double min = 1e308, max = -min;	for (long i = 1; i <= my ny; i++) {		for (long j = 1; j <= my nx; j++) {			double val = TO10LOG (my z[i][j]);			min = val < min ? val : min;			max = val > max ? val : max;			thy z[i][j] = val;		}	}	double dBminimum = dBmaximum - dynamicRangedB;	if (autoscaling) {		dBminimum = min; dBmaximum = max;	}	for (long j = 1; j <= my nx; j++) {		double lmax = thy z[1][j];		for (long i = 2; i <= my ny; i++) {			if (thy z[i][j] > lmax) {				lmax = thy z[i][j];			}		}		double factor = dynamicCompression * (max - lmax);		for (long i = 1; i <= my ny; i++) {			thy z[i][j] += factor;		}	}		Graphics_setInner (g);	Graphics_setWindow (g, tmin, tmax, qmin, qmax);	Graphics_image (g, thy z,		itmin, itmax,		Matrix_columnToX (thee.get(), itmin - 0.5),		Matrix_columnToX (thee.get(), itmax + 0.5),		ifmin, ifmax,		Matrix_rowToY (thee.get(), ifmin - 0.5),		Matrix_rowToY (thee.get(), ifmax + 0.5),		dBminimum, dBmaximum);	Graphics_unsetInner (g);	if (garnish) {		Graphics_drawInnerBox (g);		Graphics_textBottom (g, true, U"Time (s)");		Graphics_marksBottom (g, 2, true, true, false);		Graphics_marksLeft (g, 2, true, true, false);		Graphics_textLeft (g, true, U"Quefrency (s)");	}}
开发者ID:nullpunktTUD,项目名称:praat,代码行数:56,


示例11: Ltas_draw

void Ltas_draw (Ltas me, Graphics g, double fmin, double fmax, double minimum, double maximum, int garnish, const wchar *method) {	Vector_draw (me, g, & fmin, & fmax, & minimum, & maximum, 1.0, method);	if (garnish) {		Graphics_drawInnerBox (g);		Graphics_textBottom (g, 1, L"Frequency (Hz)");		Graphics_marksBottom (g, 2, 1, 1, 0);		Graphics_textLeft (g, 1, L"Sound pressure level (dB/Hz)");		Graphics_marksLeft (g, 2, 1, 1, 0);	}}
开发者ID:georgiee,项目名称:lip-sync-lpc,代码行数:10,


示例12: BarkFilter_drawSekeyHansonFilterFunctions

void BarkFilter_drawSekeyHansonFilterFunctions (BarkFilter me, Graphics g,        int toFreqScale, int fromFilter, int toFilter, double zmin, double zmax,        int dbScale, double ymin, double ymax, int garnish) {	if (! checkLimits (me, FilterBank_BARK, toFreqScale, & fromFilter, & toFilter,	                   & zmin, & zmax, dbScale, & ymin, & ymax)) {		return;	}	long n = 1000;	autoNUMvector<double> a (1, n);	Graphics_setInner (g);	Graphics_setWindow (g, zmin, zmax, ymin, ymax);	for (long j = fromFilter; j <= toFilter; j++) {		double df = (zmax - zmin) / (n - 1);		double zMid = Matrix_rowToY (me, j);		long ibegin, iend;		for (long i = 1; i <= n; i++) {			double f = zmin + (i - 1) * df;			double z = scaleFrequency (f, toFreqScale, FilterBank_BARK);			if (z == NUMundefined) {				a[i] = NUMundefined;			} else {				z -= zMid + 0.215;				a[i] = 7 - 7.5 * z - 17.5 * sqrt (0.196 + z * z);				if (! dbScale) {					a[i] = pow (10, a[i]);				}			}		}		setDrawingLimits (a.peek(), n, ymin, ymax, &ibegin, &iend);		if (ibegin <= iend) {			double fmin = zmin + (ibegin - 1) * df;			double fmax = zmax - (n - iend) * df;			Graphics_function (g, a.peek(), ibegin, iend, fmin, fmax);		}	}	Graphics_unsetInner (g);	if (garnish) {		double distance = dbScale ? 10 : 1;		const char32 *ytext = dbScale ? U"Amplitude (dB)" : U"Amplitude";		Graphics_drawInnerBox (g);		Graphics_marksBottom (g, 2, 1, 1, 0);		Graphics_marksLeftEvery (g, 1, distance, 1, 1, 0);		Graphics_textLeft (g, 1, ytext);		Graphics_textBottom (g, 1, GetFreqScaleText (toFreqScale));	}}
开发者ID:psibre,项目名称:praat,代码行数:55,


示例13: LogisticRegression_drawBoundary

void LogisticRegression_drawBoundary (LogisticRegression me, Graphics graphics, long colx, double xleft, double xright,	long coly, double ybottom, double ytop, bool garnish){	RegressionParameter parmx = static_cast<RegressionParameter> (my parameters -> item [colx]);	RegressionParameter parmy = static_cast<RegressionParameter> (my parameters -> item [coly]);	if (xleft == xright) {		xleft = parmx -> minimum;		xright = parmx -> maximum;	}	if (ybottom == ytop) {		ybottom = parmy -> minimum;		ytop = parmy -> maximum;	}	double intercept = my intercept;	for (long iparm = 1; iparm <= my parameters -> size; iparm ++) {		if (iparm != colx && iparm != coly) {			RegressionParameter parm = static_cast<RegressionParameter> (my parameters -> item [iparm]);			intercept += parm -> value * (0.5 * (parm -> minimum + parm -> maximum));		}	}	Graphics_setInner (graphics);	Graphics_setWindow (graphics, xleft, xright, ybottom, ytop);	double xbottom = (intercept + parmy -> value * ybottom) / - parmx -> value;	double xtop = (intercept + parmy -> value * ytop) / - parmx -> value;	double yleft = (intercept + parmx -> value * xleft) / - parmy -> value;	double yright = (intercept + parmx -> value * xright) / - parmy -> value;	double xmin = NUMmin2 (xleft, xright), xmax = NUMmax2 (xleft, xright);	double ymin = NUMmin2 (ybottom, ytop), ymax = NUMmax2 (ybottom, ytop);	//Melder_casual ("LogisticRegression_drawBoundary: %f %f %f %f %f %f %f %f",	//	xmin, xmax, xbottom, xtop, ymin, ymax, yleft, yright);	if (xbottom >= xmin && xbottom <= xmax) {   // line goes through bottom?		if (xtop >= xmin && xtop <= xmax)   // line goes through top?			Graphics_line (graphics, xbottom, ybottom, xtop, ytop);   // draw from bottom to top		else if (yleft >= ymin && yleft <= ymax)   // line goes through left?			Graphics_line (graphics, xbottom, ybottom, xleft, yleft);   // draw from bottom to left		else if (yright >= ymin && yright <= ymax)   // line goes through right?			Graphics_line (graphics, xbottom, ybottom, xright, yright);   // draw from bottom to right	} else if (yleft >= ymin && yleft <= ymax) {   // line goes through left?		if (yright >= ymin && yright <= ymax)   // line goes through right?			Graphics_line (graphics, xleft, yleft, xright, yright);   // draw from left to right		else if (xtop >= xmin && xtop <= xmax)   // line goes through top?			Graphics_line (graphics, xleft, yleft, xtop, ytop);   // draw from left to top	} else if (xtop >= xmin && xtop <= xmax) {   // line goes through top?		if (yright >= ymin && yright <= ymax)   // line goes through right?			Graphics_line (graphics, xtop, ytop, xright, yright);   // draw from top to right	}	Graphics_unsetInner (graphics);	if (garnish) {		Graphics_drawInnerBox (graphics);		Graphics_textBottom (graphics, true, parmx -> label);		Graphics_marksBottom (graphics, 2, true, true, false);		Graphics_textLeft (graphics, true, parmy -> label);		Graphics_marksLeft (graphics, 2, true, true, false);	}}
开发者ID:georgiee,项目名称:lip-sync-lpc,代码行数:55,


示例14: BandFilterSpectrogram_drawSpectrumAtNearestTimeSlice

void BandFilterSpectrogram_drawSpectrumAtNearestTimeSlice (BandFilterSpectrogram me, Graphics g, double time, double fmin, double fmax, double dBmin, double dBmax, int garnish) {	if (time < my xmin || time > my xmax) {		return;	}	if (fmin == 0 && fmax == 0) { // autoscaling		fmin = my ymin; fmax = my ymax;	}	if (fmax <= fmin) {		fmin = my ymin; fmax = my ymax;	}	long icol = Matrix_xToNearestColumn (me, time);	icol = icol < 1 ? 1 : (icol > my nx ? my nx : icol);	autoNUMvector<double> spectrum (1, my ny);	for (long i = 1; i <= my ny; i++) {		spectrum[i] = my v_getValueAtSample (icol, i, 1); // dB's	}	long iymin, iymax;	if (Matrix_getWindowSamplesY (me, fmin, fmax, &iymin, &iymax) < 2) { // too few values		return;	}	if (dBmin == dBmax) { // autoscaling		dBmin = spectrum[iymin]; dBmax = dBmin;		for (long i = iymin + 1; i <= iymax; i++) {			if (spectrum[i] < dBmin) {				dBmin = spectrum[i];			} else if (spectrum[i] > dBmax) {				dBmax = spectrum[i];			}		}		if (dBmin == dBmax) { 			dBmin -= 1; dBmax += 1;		}	}	Graphics_setWindow (g, fmin, fmax, dBmin, dBmax);	Graphics_setInner (g);	double x1 = my y1 + (iymin -1) * my dy, y1 = spectrum[iymin];	for (long i = iymin + 1; i <= iymax - 1; i++) {		double x2 = my y1 + (i -1) * my dy, y2 = spectrum[i];		double xo1, yo1, xo2, yo2;		if (NUMclipLineWithinRectangle (x1, y1, x2, y2, fmin, dBmin, fmax, dBmax, &xo1, &yo1, &xo2, &yo2)) {			Graphics_line (g, xo1, yo1, xo2, yo2);		}		x1 = x2; y1 = y2;	}	Graphics_unsetInner (g);	if (garnish) {		Graphics_drawInnerBox (g);		Graphics_marksBottom (g, 2, 1, 1, 0);		Graphics_marksLeft (g, 2, 1, 1, 0);		Graphics_textLeft (g, 1, U"Power (dB)");		Graphics_textBottom (g, 1, Melder_cat (U"Frequency (", my v_getFrequencyUnit (), U")"));	}}
开发者ID:davideberdin,项目名称:praat,代码行数:55,


示例15: BandFilterSpectrogram_drawTimeSlice

void BandFilterSpectrogram_drawTimeSlice (BandFilterSpectrogram me, Graphics g, double t, double fmin, double fmax, double min, double max, const char32 *xlabel, int garnish) {	Matrix_drawSliceY (me, g, t, fmin, fmax, min, max);	if (garnish) {		Graphics_drawInnerBox (g);		Graphics_marksBottom (g, 2, true, true, false);		Graphics_marksLeft (g, 2, true, true, false);		if (xlabel) {			Graphics_textBottom (g, false, xlabel);		}	}}
开发者ID:READSEARCH,项目名称:praat,代码行数:11,


示例16: Spectrum_draw

void Spectrum_draw (Spectrum me, Graphics g, double fmin, double fmax, double minimum, double maximum, int garnish) {	Graphics_setInner (g);	Spectrum_drawInside (me, g, fmin, fmax, minimum, maximum);	Graphics_unsetInner (g);	if (garnish) {		Graphics_drawInnerBox (g);		Graphics_textBottom (g, 1, L"Frequency (Hz)");		Graphics_marksBottom (g, 2, true, true, false);		Graphics_textLeft (g, 1, L"Sound pressure level (dB/Hz)");		Graphics_marksLeftEvery (g, 1.0, 20.0, true, true, false);	}}
开发者ID:Crisil,项目名称:praat,代码行数:12,


示例17: FFNet_drawCostHistory

void FFNet_drawCostHistory (FFNet me, Graphics g, long iFrom, long iTo, double costMin, double costMax, int garnish) {	if (my minimizer) {		Minimizer_drawHistory (my minimizer.peek(), g, iFrom, iTo, costMin, costMax, 0);	}	if (garnish) {		Graphics_drawInnerBox (g);		Graphics_textLeft (g, true, my costFunctionType == FFNet_COST_MSE ?		                   U"Minimum squared error" : U"Minimum cross entropy");		Graphics_marksLeft (g, 2, true, true, false);		Graphics_textBottom (g, true, U"Number of epochs");		Graphics_marksBottom (g, 2, true, true, false);	}}
开发者ID:ffostertw,项目名称:praat,代码行数:13,


示例18: FilterBank_drawTimeSlice

void FilterBank_drawTimeSlice (I, Graphics g, double t, double fmin,                               double fmax, double min, double max, const char32 *xlabel, int garnish) {	iam (Matrix);	Matrix_drawSliceY (me, g, t, fmin, fmax, min, max);	if (garnish) {		Graphics_drawInnerBox (g);		Graphics_marksBottom (g, 2, 1, 1, 0);		Graphics_marksLeft (g, 2, 1, 1, 0);		if (xlabel) {			Graphics_textBottom (g, 0, xlabel);		}	}}
开发者ID:psibre,项目名称:praat,代码行数:13,


示例19: Matrix_drawAsSquares

void Matrix_drawAsSquares (Matrix me, Graphics g, double xmin, double xmax, double ymin, double ymax, int garnish) {	Graphics_Colour colour = Graphics_inqColour (g);	long ixmin, ixmax, iymin, iymax;	if (xmax <= xmin) {		xmin = my xmin;		xmax = my xmax;	}	long nx = Matrix_getWindowSamplesX (me, xmin, xmax, &ixmin, &ixmax);	if (ymax <= ymin) {		ymin = my ymin;		ymax = my ymax;	}	long ny = Matrix_getWindowSamplesY (me, ymin, ymax, &iymin, &iymax);	double min, max = nx > ny ? nx : ny;	double dx = (xmax - xmin) / max, dy = (ymax - ymin) / max;	Graphics_setInner (g);	Graphics_setWindow (g, xmin, xmax, ymin, ymax);	Matrix_getWindowExtrema (me, ixmin, ixmax, iymin, iymax, & min, & max);	double wAbsMax = fabs (max) > fabs (min) ? fabs (max) : fabs (min);	for (long i = iymin; i <= iymax; i++) {		double y = Matrix_rowToY (me, i);		for (long j = ixmin; j <= ixmax; j++) {			double x = Matrix_columnToX (me, j);			double d = 0.95 * sqrt (fabs (my z[i][j]) / wAbsMax);			if (d > 0) {				double x1WC = x - d * dx / 2, x2WC = x + d * dx / 2;				double y1WC = y - d * dy / 2, y2WC = y + d * dy / 2;				if (my z[i][j] > 0) {					Graphics_setColour (g, Graphics_WHITE);				}				Graphics_fillRectangle (g, x1WC, x2WC, y1WC, y2WC);				Graphics_setColour (g, colour);				Graphics_rectangle (g, x1WC, x2WC , y1WC, y2WC);			}		}	}	Graphics_setGrey (g, 0.0);	Graphics_unsetInner (g);	if (garnish) {		Graphics_drawInnerBox (g);		Graphics_marksLeft (g, 2, true, true, false);		if (ymin * ymax < 0.0) {			Graphics_markLeft (g, 0.0, true, true, true, nullptr);		}		Graphics_marksBottom (g, 2, true, true, false);		if (xmin * xmax < 0.0) {			Graphics_markBottom (g, 0.0, true, true, true, nullptr);		}	}}
开发者ID:PaulBoersma,项目名称:praat,代码行数:51,


示例20: Formant_drawSpeckles

void Formant_drawSpeckles (Formant me, Graphics g, double tmin, double tmax, double fmax, double suppress_dB,	int garnish){	Graphics_setInner (g);	Formant_drawSpeckles_inside (me, g, tmin, tmax, 0.0, fmax, suppress_dB);	Graphics_unsetInner (g);	if (garnish) {		Graphics_drawInnerBox (g);		Graphics_textBottom (g, 1, U"Time (s)");		Graphics_textLeft (g, 1, U"Formant frequency (Hz)");		Graphics_marksBottom (g, 2, 1, 1, 0);		Graphics_marksLeftEvery (g, 1.0, 1000.0, 1, 1, 1);	}}
开发者ID:psibre,项目名称:praat,代码行数:14,


示例21: Intensity_draw

void Intensity_draw (Intensity me, Graphics g, double tmin, double tmax,	double minimum, double maximum, int garnish){	Graphics_setInner (g);	Intensity_drawInside (me, g, tmin, tmax, minimum, maximum);	Graphics_unsetInner (g);	if (garnish) {		Graphics_drawInnerBox (g);		Graphics_textBottom (g, 1, L"Time (s)");		Graphics_marksBottom (g, 2, 1, 1, 0);		Graphics_marksLeft (g, 2, 1, 1, 0);		Graphics_textLeft (g, 1, L"Intensity (dB)");	}}
开发者ID:Crisil,项目名称:praat,代码行数:14,


示例22: Matrix_scatterPlot

void Matrix_scatterPlot (Matrix me, Graphics g, long icx, long icy, double xmin, double xmax, double ymin, double ymax, double size_mm, const char32 *mark, int garnish) {	long ix = labs (icx), iy = labs (icy);	if (ix < 1 || ix > my nx || iy < 1 || iy > my nx) {		return;	}	if (xmax <= xmin) {		(void) Matrix_getWindowExtrema (me, ix, ix, 1, my ny, & xmin, & xmax);		if (xmax <= xmin) {			xmin -= 0.5; xmax += 0.5;		}	}	if (ymax <= ymin) {		(void) Matrix_getWindowExtrema (me, iy, iy, 1, my ny, & ymin, & ymax);		if (ymax <= ymin) {			ymin -= 0.5; ymax += 0.5;		}	}	Graphics_setInner (g);	if (icx < 0) {		double t = xmin;		xmin = xmax;		xmax = t;	}	if (icy < 0) {		double t = ymin;		ymin = ymax;		ymax = t;	}	Graphics_setWindow (g, xmin, xmax, ymin, ymax);	for (long i = 1; i <= my ny; i++) {		if (my z[i][ix] >= xmin && my z[i][ix] <= xmax && my z[i][iy] >= ymin && my z[i][iy] <= ymax) {			Graphics_mark (g, my z[i][ix], my z[i][iy], size_mm, mark);		}	}	Graphics_unsetInner (g);	if (garnish) {		Graphics_drawInnerBox (g);		Graphics_marksLeft (g, 2, true, true, false);		if (ymin * ymax < 0.0) {			Graphics_markLeft (g, 0.0, true, true, true, nullptr);		}		Graphics_marksBottom (g, 2, true, true, false);		if (xmin * xmax < 0.0) {			Graphics_markBottom (g, 0.0, true, true, true, nullptr);		}	}}
开发者ID:PaulBoersma,项目名称:praat,代码行数:48,


示例23: Pitch_draw

void Pitch_draw (Pitch me, Graphics g, double tmin, double tmax, double fmin, double fmax, bool garnish, bool speckle, int unit) {	Graphics_setInner (g);	Pitch_drawInside (me, g, tmin, tmax, fmin, fmax, speckle, unit);	Graphics_unsetInner (g);	if (garnish) {		Graphics_drawInnerBox (g);		Graphics_textBottom (g, true, U"Time (s)");		Graphics_marksBottom (g, 2, true, true, false);		Graphics_textLeft (g, true, Melder_cat (U"Pitch (", Function_getUnitText (me, Pitch_LEVEL_FREQUENCY, unit, Function_UNIT_TEXT_GRAPHICAL), U")"));		if (Function_isUnitLogarithmic (me, Pitch_LEVEL_FREQUENCY, unit)) {			Graphics_marksLeftLogarithmic (g, 6, true, true, false);		} else {			Graphics_marksLeft (g, 2, true, true, false);		}	}}
开发者ID:DsRQuicke,项目名称:praat,代码行数:16,


示例24: Spectrogram_paint

void Spectrogram_paint (Spectrogram me, Graphics g,	double tmin, double tmax, double fmin, double fmax, double maximum, int autoscaling,	double dynamic, double preemphasis, double dynamicCompression,	int garnish){	Graphics_setInner (g);	Spectrogram_paintInside (me, g, tmin, tmax, fmin, fmax, maximum, autoscaling, dynamic, preemphasis, dynamicCompression);	Graphics_unsetInner (g);	if (garnish) {		Graphics_drawInnerBox (g);		Graphics_textBottom (g, 1, U"Time (s)");		Graphics_marksBottom (g, 2, 1, 1, 0);		Graphics_marksLeft (g, 2, 1, 1, 0);		Graphics_textLeft (g, 1, U"Frequency (Hz)");	}}
开发者ID:psibre,项目名称:praat,代码行数:16,


示例25: ERP_drawChannel_number

void ERP_drawChannel_number (ERP me, Graphics graphics, long channelNumber, double tmin, double tmax, double vmin, double vmax, bool garnish) {	if (channelNumber < 1 || channelNumber > my ny) return;	/*	 * Automatic domain.	 */	if (tmin == tmax) {		tmin = my xmin;		tmax = my xmax;	}	/*	 * Domain expressed in sample numbers.	 */	long ixmin, ixmax;	Matrix_getWindowSamplesX (me, tmin, tmax, & ixmin, & ixmax);	/*	 * Automatic vertical range.	 */	if (vmin == vmax) {		Matrix_getWindowExtrema (me, ixmin, ixmax, channelNumber, channelNumber, & vmin, & vmax);		if (vmin == vmax) {			vmin -= 1.0;			vmax += 1.0;		}	}	/*	 * Set coordinates for drawing.	 */	Graphics_setInner (graphics);	Graphics_setWindow (graphics, tmin, tmax, vmin, vmax);	Graphics_function (graphics, my z [channelNumber], ixmin, ixmax, Matrix_columnToX (me, ixmin), Matrix_columnToX (me, ixmax));	Graphics_unsetInner (graphics);	if (garnish) {		Graphics_drawInnerBox (graphics);		Graphics_textTop (graphics, true, Melder_wcscat (L"Channel ", my channelNames [channelNumber]));		Graphics_textBottom (graphics, true, L"Time (s)");		Graphics_marksBottom (graphics, 2, true, true, false);		if (0.0 > tmin && 0.0 < tmax)			Graphics_markBottom (graphics, 0.0, true, true, true, NULL);		Graphics_markLeft (graphics, vmin, true, true, false, NULL);		Graphics_markLeft (graphics, vmax, true, true, false, NULL);			Graphics_markBottom (graphics, 0.0, true, true, true, NULL);		if (vmin != 0.0 && vmax != 0.0 && (vmin > 0.0) != (vmax > 0.0)) {			Graphics_markLeft (graphics, 0.0, true, true, true, NULL);		}	}}
开发者ID:Crisil,项目名称:praat,代码行数:47,


示例26: Cepstrum_draw

void Cepstrum_draw (Cepstrum me, Graphics g, double qmin, double qmax,                    double minimum, double maximum, int garnish) {	int autoscaling = minimum >= maximum;	Graphics_setInner (g);	if (qmax <= qmin) {		qmin = my xmin; qmax = my xmax;	}	long imin, imax;	if (! Matrix_getWindowSamplesX (me, qmin, qmax, & imin, & imax)) {		return;	}	autoNUMvector<double> y (imin, imax);	double *z = my z[1];	for (long i = imin; i <= imax; i++) {		y[i] = z[i];	}	if (autoscaling) {		NUMvector_extrema (y.peek(), imin, imax, & minimum, & maximum);	}	for (long i = imin; i <= imax; i ++) {		if (y[i] > maximum) {			y[i] = maximum;		} else if (y[i] < minimum) {			y[i] = minimum;		}	}	Graphics_setWindow (g, qmin, qmax, minimum, maximum);	Graphics_function (g, y.peek(), imin, imax, Matrix_columnToX (me, imin), Matrix_columnToX (me, imax));	Graphics_unsetInner (g);	if (garnish) {		Graphics_drawInnerBox (g);		Graphics_textBottom (g, 1, L"Quefrency");		Graphics_marksBottom (g, 2, TRUE, TRUE, FALSE);		Graphics_textLeft (g, 1, L"Amplitude");	}}
开发者ID:georgiee,项目名称:lip-sync-lpc,代码行数:46,


示例27: LineSpectralFrequencies_drawFrequencies

void LineSpectralFrequencies_drawFrequencies (LineSpectralFrequencies me, Graphics g, double tmin, double tmax, double fmin, double fmax, bool garnish) {	if (tmax <= tmin) {		tmin = my xmin;		tmax = my xmax;	}	long itmin, itmax;	if (! Sampled_getWindowSamples (me, tmin, tmax, & itmin, & itmax)) {		return;	}	if (fmax <= fmin) {		double f1max, f2min; 		autoNUMvector<double> f1 (itmin, itmax), f2 (itmin, itmax);		for (long iframe = itmin; iframe <= itmax; iframe++) {			f1[iframe] = my d_frames[iframe].frequencies[1];			f2[iframe] = my d_frames[iframe].frequencies[my d_frames[iframe].numberOfFrequencies];		}		NUMvector_extrema (f1.peek(), itmin, itmax, & fmin, & f1max);		NUMvector_extrema (f2.peek(), itmin, itmax, & f2min, & fmax);	}	if (fmax == fmin) {		fmin = 0;		fmax += 0.5;	}	Graphics_setInner (g);	Graphics_setWindow (g, tmin, tmax, fmin, fmax);	for (long iframe = itmin; iframe <= itmax; iframe++) {		LineSpectralFrequencies_Frame lsf = & my d_frames[iframe];		double x = Sampled_indexToX (me, iframe);		for (long ifreq = 1; ifreq <= lsf -> numberOfFrequencies; ifreq++) {			double y = lsf -> frequencies [ifreq];			if (y >= fmin && y <= fmax) { 				Graphics_speckle (g, x, y);			}		}	}	Graphics_unsetInner (g);	if (garnish) {		Graphics_drawInnerBox (g);		Graphics_textBottom (g, true, U"Time (seconds)");		Graphics_textLeft (g, true, U"Frequency (Hz)");		Graphics_marksBottom (g, 2, true, true, false);		Graphics_marksLeft (g, 2, true, true, false);	}}
开发者ID:READSEARCH,项目名称:praat,代码行数:45,


示例28: SPINET_spectralRepresentation

void SPINET_spectralRepresentation (SPINET me, Graphics g, double fromTime, double toTime, double fromErb, double toErb, double minimum, double maximum, int enhanced, int garnish) {    double **z = enhanced ? my s : my y;    autoMatrix thee = Matrix_create (my xmin, my xmax, my nx, my dx, my x1, my ymin, my ymax, my ny, my dy, my y1);    for (long j = 1; j <= my ny; j++) {        for (long i = 1; i <= my nx; i++) {            thy z[j][i] = z[j][i];        }    }    Matrix_paintCells (thee.peek(), g, fromTime, toTime, fromErb, toErb, minimum, maximum);    if (garnish) {        Graphics_drawInnerBox (g);        Graphics_textBottom (g, true, U"Time (s)");        Graphics_marksBottom (g, 2, true, true, false);        Graphics_textLeft (g, true, U"Frequency (ERB)");        Graphics_marksLeft (g, 2, true, true, false);        Graphics_textTop (g, false, enhanced ? U"Cooperative interaction output" : U"Gammatone filterbank output");    }}
开发者ID:DsRQuicke,项目名称:praat,代码行数:18,


示例29: PitchTier_Pitch_draw

void PitchTier_Pitch_draw (PitchTier me, Pitch uv, Graphics g,	double tmin, double tmax, double fmin, double fmax, int nonPeriodicLineType, int garnish, const char32 *method){	long n = my points.size, imin, imax, i;	if (nonPeriodicLineType == 0) {		PitchTier_draw (me, g, tmin, tmax, fmin, fmax, garnish, method);		return;	}	if (tmax <= tmin) { tmin = my xmin; tmax = my xmax; }	Graphics_setWindow (g, tmin, tmax, fmin, fmax);	Graphics_setInner (g);	imin = AnyTier_timeToHighIndex (me->asAnyTier(), tmin);	imax = AnyTier_timeToLowIndex (me->asAnyTier(), tmax);	if (n == 0) {	} else if (imax < imin) {		double fleft = RealTier_getValueAtTime (me, tmin);		double fright = RealTier_getValueAtTime (me, tmax);		Pitch_line (uv, g, tmin, fleft, tmax, fright, nonPeriodicLineType);	} else for (i = imin; i <= imax; i ++) {		RealPoint point = my points.at [i];		double t = point -> number, f = point -> value;		Graphics_speckle (g, t, f);		if (i == 1)			Pitch_line (uv, g, tmin, f, t, f, nonPeriodicLineType);		else if (i == imin)			Pitch_line (uv, g, t, f, tmin, RealTier_getValueAtTime (me, tmin), nonPeriodicLineType);		if (i == n)			Pitch_line (uv, g, t, f, tmax, f, nonPeriodicLineType);		else if (i == imax)			Pitch_line (uv, g, t, f, tmax, RealTier_getValueAtTime (me, tmax), nonPeriodicLineType);		else {			RealPoint pointRight = my points.at [i + 1];			Pitch_line (uv, g, t, f, pointRight -> number, pointRight -> value, nonPeriodicLineType);		}	}	Graphics_unsetInner (g);	if (garnish) {		Graphics_drawInnerBox (g);		Graphics_textBottom (g, true, U"Time (s)");		Graphics_marksBottom (g, 2, true, true, false);		Graphics_marksLeft (g, 2, true, true, false);		Graphics_textLeft (g, true, U"Frequency (Hz)");	}}
开发者ID:READSEARCH,项目名称:praat,代码行数:44,


示例30: BandFilterSpectrogram_drawFrequencyScale

// xmin, xmax in hz versus bark/mel or linvoid BandFilterSpectrogram_drawFrequencyScale (BandFilterSpectrogram me, Graphics g, double xmin, double xmax, double ymin, double ymax, int garnish) {	if (xmin < 0 || xmax < 0 || ymin < 0 || ymax < 0) {		Melder_warning (U"Frequencies must be >= 0.");		return;	}	// scale is in hertz	if (xmin >= xmax) { // autoscaling		xmin = 0;		xmax = my v_frequencyToHertz (my ymax);	}	if (ymin >= ymax) { // autoscaling		ymin = my ymin;		ymax = my ymax;	}	long n = 2000;	Graphics_setInner (g);	Graphics_setWindow (g, xmin, xmax, ymin, ymax);	double dx = (xmax - xmin) / (n - 1);	double x1 = xmin, y1 = my v_hertzToFrequency (x1);	for (long i = 2; i <= n;  i++) {		double x2 = x1 + dx, y2 = my v_hertzToFrequency (x2);		if (NUMdefined (y1) && NUMdefined (y2)) {			double xo1, yo1, xo2, yo2;			if (NUMclipLineWithinRectangle (x1, y1, x2, y2, xmin, ymin, xmax, ymax, &xo1, &yo1, &xo2, &yo2)) {				Graphics_line (g, xo1, yo1, xo2, yo2);			}		}		x1 = x2; y1 = y2;	}	Graphics_unsetInner (g);	if (garnish) {		Graphics_drawInnerBox (g);		Graphics_marksLeft (g, 2, 1, 1, 0);		Graphics_textLeft (g, 1, Melder_cat (U"Frequency (", my v_getFrequencyUnit (), U")"));		Graphics_marksBottom (g, 2, 1, 1, 0);		Graphics_textBottom (g, 1, U"Frequency (Hz)");	}}
开发者ID:davideberdin,项目名称:praat,代码行数:45,



注:本文中的Graphics_drawInnerBox函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ Graphics_line函数代码示例
C++ Graphics函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。