コード例 #1
0
ファイル: canvas.cpp プロジェクト: punkkeks/ClanLib
void Canvas::fill_ellipse(const Pointf &center, float radius_x, float radius_y, const Gradient &gradient)
{
	float max_radius = max(radius_x, radius_y);
	if (max_radius == 0)
		return;

	const Mat4f original_transform = get_transform();
	mult_transform(Mat4f::translate(center.x, center.y, 0));
	mult_transform(Mat4f::scale(radius_x / max_radius, radius_y / max_radius, 1.0f));
	fill_circle(Pointf(0, 0), max_radius, gradient);
	set_transform(original_transform);
}
コード例 #2
0
/**
 * cleanmean_xy_transform: calulcates the cleaned mean of an array
 * of transforms, considering only x and y
 *
 * Parameters:
 *    transforms: array of transforms.
 *           len: length  of array
 * Return value:
 *     A new transform with x and y beeing the cleaned mean
 *     (meaning upper and lower pentile are removed) of
 *     all transforms. alpha and other fields are 0.
 * Preconditions:
 *     len>0
 * Side effects:
 *     None
 */
Transform cleanmean_xy_transform(const Transform* transforms, int len)
{
  Transform* ts = vs_malloc(sizeof(Transform) * len);
  Transform t = null_transform();
  int i, cut = len / 5;
  memcpy(ts, transforms, sizeof(Transform) * len);
  qsort(ts,len, sizeof(Transform), cmp_trans_x);
  for (i = cut; i < len - cut; i++){ // all but cutted
    t.x += ts[i].x;
  }
  qsort(ts, len, sizeof(Transform), cmp_trans_y);
  for (i = cut; i < len - cut; i++){ // all but cutted
    t.y += ts[i].y;
  }
  vs_free(ts);
  return mult_transform(&t, 1.0 / (len - (2.0 * cut)));
}
コード例 #3
0
/* like mult_transform but with non-pointer signature */
Transform mult_transform_(const Transform t1, double f)
{
  return mult_transform(&t1,f);
}