.net WPF/Silverlight如何计算控件中的总立方单位/像素?
我的silverlight应用程序中有一个scribbale inkpresenter,我在不同的形状中多次使用它,我想计算inkpresenter中有多少百分比被涂鸦 我的问题是,由于墨水演示器的形状可以是圆形或多边形,我不知道如何获得可涂写表面上可用的单位/像素 据我所知,actualWidth和actualHeight属性只能通过计算矩形形状来帮助我.net WPF/Silverlight如何计算控件中的总立方单位/像素?,.net,wpf,silverlight,graphics,vector-graphics,.net,Wpf,Silverlight,Graphics,Vector Graphics,我的silverlight应用程序中有一个scribbale inkpresenter,我在不同的形状中多次使用它,我想计算inkpresenter中有多少百分比被涂鸦 我的问题是,由于墨水演示器的形状可以是圆形或多边形,我不知道如何获得可涂写表面上可用的单位/像素 据我所知,actualWidth和actualHeight属性只能通过计算矩形形状来帮助我 units = uielemnt.Actualwidth * uielement.ActualHeight 但是对于肋骨形状,我不确定实际
units = uielemnt.Actualwidth * uielement.ActualHeight
但是对于肋骨形状,我不确定实际宽度/高度是如何计算的。WPF答案 在WPF中,您可以只使用几何体。组合以组合笔划几何体,然后调用组合几何体上的GetArea以获得覆盖的总面积 Silverlight回答 在Silverlight中,您没有Geomerty.Combine或Geometry.GetArea,也没有RenderTargetBitmap。因此,在Silverlight中,我认为您必须自己进行计算 以下是设置步骤:
- Bezier段:立方控制点为P0、P1、P2、P3(无变化)
- 线段:立方控制点为P0、P0、P1、P1
- 二次Bezier段:三次控制点为P0,(P0+2P1)/3,(2P1+P2)/3,P2
- 弧段:分为八分之一,分别计算指向弧的起点和终点处的单位切线向量T0、T1,生成P0、P0+T0*4/3*(Sqrt(2)-1)*R、P1+T1*4/3(Sqrt(2)-1)*R、P1的控制点(近似值),然后使用大小和旋转角度进行修改
- 多边形…分段:分成单独的分段,然后在每个分段上使用上述公式
- 由于曲线已在其最小值/最大值处分割,因此每个曲线都是x的平滑连续函数,您可以使用它来计算它们的交点
- 如果在实际计算交叉点之前检查y最小值/最大值以查看是否存在任何可能的重叠,则可以节省一些计算