在喷气背包构图中画钟形曲线



我需要帮助创建以下可组合

选项

我只知道这个形状是钟形曲线,但我不知道如何使用画布来实现这一点。提前感谢

编辑:

当我两个月前第一次回答这个问题时,我不知道我最终会需要做这件事。我当时的建议是用正态方程来画点。这就是它的样子。我对float和dp进行了硬编码,因为与根据用例重写高级逻辑相比,人们更容易定制低级逻辑。

首先,正态分布的概率密度函数是$\frac{1}{\sigma\sqrt{2\pi}}e^{-.5(frac{x-\mu}{{sigma}(^{2}}$。

因为我们只想要一个图形,而不需要实际的概率,所以我只想放弃$\frac{1}{\sigma\sqrt{2 \pi}}$。原因是改变西格玛是调整钟形曲线中心峰宽度的最简单方法(66%的情况介于-西格玛和西格玛之间(。因此,通过扔掉$\frac{1}{\sigma\sqrt{2 \pi}}}}$,我们可以在保持固定高度的同时自由地使用曲线的宽度。

根据我的口味,左右4个标准偏差是钟形曲线的一个很好的范围,因为它可以捕获99.99%的病例,并且不会浪费太多的屏幕宽度。如果这是你想要的,设置sigma=width/4。对于5个标准偏差,使用西格玛=宽度/5,依此类推。

因此,总的来说,这个概念的一个最小演示看起来是这样的:

@Composable
fun BellCurveDemo(){
fun normalValueY(mu:Float,sigma:Float,x:Float):Float{
return (Math.pow(2.718,-.5*Math.pow(((x-mu).toDouble()/sigma.toDouble()),2.0))).toFloat()
}
val height=200f
val width=400f
val heightdp= with(LocalDensity.current){height.toDp()}
val widthdp=with(LocalDensity.current){width.toDp()}
Canvas(Modifier.height(heightdp).width(widthdp)){
val path= Path()
path.moveTo(0f,height-height*normalValueY(width/2,width/4,0f))
for (i in 1 .. 20){
path.lineTo(i*width/20,height-height*normalValueY(width/2,width/4,i*width/20))
}
drawPath(path,color=Color.Blue,style= Stroke(3f,pathEffect= PathEffect.cornerPathEffect(1f)))
}
}

最新更新