I eccentially gave you the answer in my last comment, the one with "A-C-B" and "X-C-Z" angles. Before you clarify your problem, I can give you a solution for the simple roulette you are trying to depict, a flat roulette.
Here is the idea. As it seems that you have no problems with rendering the roulette shown directly from above, when all circular shapes remain circular. If you want to show the same roulette assuming it is flat (see my comment about elevated rim), do such a simple thing: draw everything for exactly round concentric picture, that is, with ellipses being strictly circular, as seen from above. Do all the rendering: all circles, all straight like segments, fill all with the colors.
After this work is done, you need to transform your picture to the picture seen from and angle. For this purpose, simply perform some transform to your instance of
Graphics
. In this case, you need to vertically squize the picture. This can be done by the method
System.Drawing.Drawing2D.Matrix.Scale
, using 1 for the first argument (horizontal direction) and some value < 1 for second argument (vertical direction). Please see:
Matrix.Scale Method (Single, Single) (System.Drawing.Drawing2D)[
^],
Matrix Class (System.Drawing.Drawing2D)[
^],
Graphics.Transform Property (System.Drawing)[
^].
I think this technique will be easy for your, because it does not require any real mathematics. Besides, I think I already saw that you are using
System.Drawing.Graphics.Transform
, so using it won't be a problem.
Now, how about more realistic 3D image? I already explained: it will be considerably more compicated. Even if the outer rim was elevated, but the conical surface wasn't "segmented" and painted in its pattern, it would be simple: you could simply shift the out rim circle up and fill the space between the rims before transform. But with lines and different colors on the conical surface, you cannot do it. And of course, all of my consideration cannot apply if you want to show proper lighting and shadows. If you need all this, I already explained what you have to go in for: you should either do all the 3D math, including the calculation of all shapes in your projection, which needs a lot of work, or you can switch to 3D graphic rendering, in particular, OpenGL or WPF:
OpenGL — Wikipedia, the free encyclopedia[
^],
3-D Graphics Overview[
^],
3-D Transformations Overview[
^].
For using WPF 3D graphics, you should either switch to WPF UI completely (recommeded), or use WPF in your
System.Windows.Forms
UI, which is also possible, in this way:
Walkthrough: Hosting a WPF Composite Control in Windows Forms[
^].
On OpenGL for .NET, please see, in particular:
SharpGL — Home[
^],
this CodeProject article can also be helpful:
OpenGL in .NET - Getting Started[
^].
See also:
3D modeling — Wikipedia, the free encyclopedia[
^].
If your concerns are different or you have other questions, please clarify. Remember my advice on how you could formulate your question, in terms of the angles A-C-B and X-C-Z, or something like that.
And please, do yourself a big favor: don't be so rude anymore, don't tell people just trying to help you and clarify what your problem is that they should "not discredit" your question, which is, essentially, a way to ask people to shut up. With such talking, you hardly can hope for good help.
—SA