WPF效果第一百九十九篇之Gamma曲线

前面效果中分享了模块对比;今天大周末那就再来分享一下最近实现的效果;基于Y=X^n公式根据不同的系数绘制Gamma曲线效果如下图:eb979c211074d707491b7d64181f26b3.gif

1、曲线的话,咱就用最简单的方式绘制一堆点:

PathFigure pathFigure = new PathFigure()
 {
     StartPoint = new Point(0, count),
 };


for(double x = 0; x <= 1; x += 0.001)
{
    //先计算Y的值
    double y = Math.Pow(x, coefficient);
    double finalX = x * count;
    double finalY = count - (y * count);
    if(Math.Abs(x - 1) < 0.001)
    {
        finalX = count;
        finalY = 0;
    }
    var line = new LineSegment(new Point(finalX, finalY), true);
    pathFigure.Segments.Add(line);
}

2、转换成Path:

PathGeometry pathGeometry = new PathGeometry();
pathGeometry.Figures.Add(pathFigure);
Path path = new Path()
{
    Fill = new SolidColorBrush(Colors.Transparent),
    Stroke = new SolidColorBrush(Colors.Red),
    StrokeThickness = 2,
    Stretch = Stretch.Uniform,
};
path.Data = pathGeometry;

3、double比较知识点:

public bool DoubleEquals(double value1, double value2)
{
    //双精度误差
    var DOUBLE_DELTA = 1E-18;
    return value1 == value2 || Math.Abs(value1 - value2) < DOUBLE_DELTA;
}

4、Path有了接下来就是动画效果:

Storyboard sb = new Storyboard();
DoubleAnimationUsingKeyFrames topKeyFrames = new DoubleAnimationUsingKeyFrames();
EasingDoubleKeyFrame topKeyFrame = new EasingDoubleKeyFrame();
topKeyFrame.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0));
topKeyFrame.Value = path.StrokeDashOffset;
topKeyFrame.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(3));
topKeyFrame.Value = 0;
topKeyFrames.KeyFrames.Add(topKeyFrame);
Storyboard.SetTarget(topKeyFrames, path);
Storyboard.SetTargetProperty(topKeyFrames, new PropertyPath(Shape.StrokeDashOffsetProperty));
sb.Children.Add(topKeyFrames);
sb.Begin();

关于StrokeDashOffset就需要一个通用算法,有需要可以留言和私信我;最终简单的效果先这样吧81ae9782816dd64f6855ab1630c07db3.png;以后有时间的话,可以再去摸索一下更复杂的效果b7768fb46e7b4eca926b5b214d1fa384.png;编程不息、Bug不止、无Bug、无生活ff6d248e1558e60bbcb8e5a7d4ef05c0.png;改bug的冷静、编码的激情、完成后的喜悦、挖坑的激动 、填坑的兴奋;这也许就是屌丝程序员的乐趣吧;今天就到这里吧;希望自己有动力一步一步坚持下去;生命不息,代码不止;大家抽空可以看看今天分享的效果,有好的意见和想法,可以在留言板随意留言;我看到后会第一时间回复大家,多谢大家的一直默默的关注和支持!如果觉得不错,那就伸出您的小手点个赞并关注一下!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值