随机排列椭圆形元素

时间:2015-04-14 08:16:30

标签: c# wpf xaml

我有一个构成数学集的对象列表。所以我想用椭圆形显示它们:

set with 5 objects

如果我然后添加一个新对象,椭圆应该增长,第六个元素应该放在椭圆内。

我以为我可以通过迭代来解决这个问题。在第一个地方object1集合名称并绘制椭圆。其次添加object2并让椭圆增长,依此类推。 但是我已经努力为第一步的安排找到合适的解决方案,更不用说第二步中椭圆的增长了。我的第一步问题是,当集合名称object1具有小字符串表示时,椭圆应该更小。如果集合名称object1具有更长的字符串表示,则椭圆应该更大。

或者我是否走错了路?也许这个问题已经存在(框架?)解决方案,我忽略了。

1 个答案:

答案 0 :(得分:0)

创建一个名为MyCount的整数属性。 创建整数常量OriginalWidth和OriginalHeight。 创建整数变量ScaledWidth和ScaledHeight。

创建集后,将mySet.Name.Count()添加到MyCount

添加对象时,请将myObject.SomeProperty.ToString().Count()添加到MyCount

删除对象后,从myObject.SomeProperty.ToString().Count()中减去MyCount

更改MyCount后,重新计算ScaledWidthScaledHeight - 类似ScaledWidth = OriginalWidth * (MyCount * [insert number here])

为了使椭圆保持正确的视角,椭圆的高度和宽度将基于常数值乘以比例因子MyCount。您需要4个整数值:OriginalWidthOriginalHeightScaledWidthScaledHeightOriginalWidthOriginalHeight是定义椭圆的最小宽度和高度的整数常量。 ScaledWidthScaledHeight是您的Ellipse的高度和宽度属性绑定的整数变量。

每次向您的论坛添加或移除新对象时,其SomeProperty中的字符数都会添加到MyCount。每次MyCount更改时,都会触发ScaledWidthScaledHeight的重新计算。将Ellipse的宽度和高度属性绑定到ScaledWidthScaledHeight,并在这些属性上实现INotifyPropertyChanged,应相应地缩放椭圆。

更新

此处发布的算法:http://programming.nullanswer.com/forum/11925似乎可以解决将子元素放在父椭圆中的问题。我在适当的地方用椭圆取代了正方形/圆形:

在[父椭圆]&内选择一个随机点。实例a此时的[非常低的宽度/高度椭圆]。 增加[椭圆]的半径,直到满足这些标准:

  • 不与任何其他选择的[省略号]重叠。
  • 不会延伸到[父椭圆]之外。

如果满足这些标准,请选择[椭圆]。