4

我正在尝试为 C++ 中的 L-System 重写引擎的实现设计数据结构,但我似乎无处可去:(。

我需要存储一串符号(字符)。有几种类型的符号(由 LSystem 的字母表指定)。假设我们有类型“A”、“B”、“C”。现在每种类型的符号都可以有不同的参数。例如,类型 A 的符号将具有一定的距离,而符号 B 将具有角度。C 符号没有参数。然后字符串可能看起来像“ABAC”。

然后我需要遍历字符串并执行一些也与每种类型的符号相关的操作。“A”可以表示“画‘距离’长度的线”(距离是A的参数),B“转‘角度’度数”,C完成绘画。

我尝试为每个符号类型(SymbolA 类、SymbolB 类、SymbolC 类)创建类 Symbol 和一个子类,但我不知道如何创建字符串。我想避免类型转换和类似的东西。

请问有人有类似的问题或有可以帮助我的想法吗?

4

2 回答 2

1

如果你想实现像完整的 L 系统这样复杂的东西,我建议使用比 C++ 更高级的语言,例如 Python 或 Common Lisp。然后您可以分析整段代码并在 C/C++ 中实现速度瓶颈。

很久以前,我在混沌理论和分形课程中使用 Common Lisp 实现了 L 系统。做起来并不难——只是使用了一个符号列表。我一直在努力寻找它的代码,但已经超过 7 年了,所以到目前为止还没有运气。

无论如何,这对我来说似乎是一种更合理的方法。即使您使用高级语言进行缓慢的实现,它也会让您更好地了解如何在 C++ 中实现它,这需要更多的开发人员时间来完成。

于 2011-05-25T02:40:18.917 回答
0

在我看来,您走在正确的轨道上:您需要一个 SymbolBase 类,该类为需要实现的那种操作定义纯虚函数,然后有 SymbolA、SymbolB 等派生类,每个类都实现特定的功能。为了将元素绘制到屏幕上,每个类都将实现一些函数,该函数将图形对象或类似对象作为参数并将其自身绘制到图形对象。

为了在“字符串”中表示这些,您最有可能需要某种类型的线性集合、STL 向量或链表,如果您要使用 L 系统产品重新排列符号,则链表更有效。然后,您将能够遍历列表以将其显示在屏幕上。您将遇到在集合中保存各种类的实例的常见问题,其中元素类型是指向基类的指针。您通常可以在没有太多类型转换的情况下使其工作(并且在需要时始终使用 dynamic_cast)。如果您正确设计了基类,那么调用代码应该能够调用基类中的纯抽象函数,而无需关心它实际与哪个特定符号类进行交互。

于 2011-07-20T14:41:45.500 回答