图形处理

xkx12 2011-03-03 02:55:23


有个多边形数组点 可能画出一个多边形

能否在这个数组点基础上实现向外或向内一个像素 画出一个同样的多边形
...全文
81 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lizhibin11 2011-03-03
  • 打赏
  • 举报
回复

class CustomButton : UIElement
{
VisualCollection childs;
DrawingVisual dvrectangle = new DrawingVisual();
DrawingContext dcrectangle;
int i = 0;
Brush bl = Brushes.Blue;
Brush w = new RadialGradientBrush(Colors.White, Colors.Red);
Brush bb = new RadialGradientBrush(Colors.Yellow, Colors.Blue);
Pen p = new Pen(Brushes.Yellow, 3);
MatrixTransform mt = new MatrixTransform();
System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("zh-cn");//FormattedText字体参数
FlowDirection fd = FlowDirection.LeftToRight;//FormattedText字体参数
Typeface tf = new Typeface("宋体");//FormattedText字体参数
double d = 25;//FormattedText字体参数
FormattedText ft;
public CustomButton(string s)
{
bl.Freeze();
w.Freeze();
p.Freeze();
ft = new FormattedText(s, ci, fd, tf, d, w);
double fk = ft.Width;
double fh = ft.Height;
childs = new VisualCollection(this);
dcrectangle = dvrectangle.RenderOpen();
dcrectangle.DrawEllipse(bb, p, new Point(40, 40), 40, 40);
dcrectangle.DrawText(ft, new Point(40 - fk / 2, 40 - fh / 2));
dcrectangle.Close();
dvrectangle.Transform = mt;
childs.Add(dvrectangle);
CompositionTarget.Rendering += CompositionTarget_Rendering;
}
public void CompositionTarget_Rendering(object sender, EventArgs e)
{
double n11 = (Math.Sin(i * 0.2) * 0.2 + 1);
double m11 = Math.Cos(i * 0.01) * n11;
double m12 = Math.Sin(i * 0.01) * n11;
mt.Matrix = new Matrix(m11, m12, -m12, m11, 40 * (1 - m11 + m12), 40 * (1 - m12 - m11));
i++;
}
protected override int VisualChildrenCount
{
get { return childs.Count; }
}
protected override Visual GetVisualChild(int index)
{
if (index < 0 || index >= childs.Count)
{
throw new ArgumentOutOfRangeException();
}
return childs[index];
}
}

这是我用WPF做的一个旋转的同时不断缩放的按钮,里面的旋转和缩放都是通过坐标乘一个矩阵来做的。
xkx12 2011-03-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lizhibin11 的回复:]
可以使用矩阵的乘法来做,比如一个矩阵{m11,m12,n11,n12,z11,z12},其中m11,n12表示缩放,m12,n11表示旋转,z11,z12表示平移,图形中的每个点的坐标乘这个矩阵。
[/Quote]
能不能给点思路
xkx12 2011-03-03
  • 打赏
  • 举报
回复
能不能实现顶点倒角??
白鸽 2011-03-03
  • 打赏
  • 举报
回复
so easy
querystringcom 2011-03-03
  • 打赏
  • 举报
回复
可以的
lizhibin11 2011-03-03
  • 打赏
  • 举报
回复
可以使用矩阵的乘法来做,比如一个矩阵{m11,m12,n11,n12,z11,z12},其中m11,n12表示缩放,m12,n11表示旋转,z11,z12表示平移,图形中的每个点的坐标乘这个矩阵。
zzmsyt 2011-03-03
  • 打赏
  • 举报
回复
呵呵 是啊 值得想想
itneste 2011-03-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bdmh 的回复:]
在弄一个组坐标,坐标值向里收一个像素就行了,比如现在x=5,那么新的的就是x=6,或x=4,看具体方向了
[/Quote]
这样并不成比例
会走形
itneste 2011-03-03
  • 打赏
  • 举报
回复
可以
.o.....a
..
. .
.b .c
通过ab两点及o点,可以确定ab夹角的大小,从而可以画出c,那么向内的点必定在c上,同理从其他各个点也可以求出其他的各两边之间的中心线,必有一交点。
从各个起始点(此处o点),按一定的比例向内或外延伸,连接所有在类c上的点即可
bdmh 2011-03-03
  • 打赏
  • 举报
回复
在弄一个组坐标,坐标值向里收一个像素就行了,比如现在x=5,那么新的的就是x=6,或x=4,看具体方向了

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧