-
Notifications
You must be signed in to change notification settings - Fork 0
/
Base.cs
219 lines (186 loc) · 9.5 KB
/
Base.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
using System;
using System.Windows.Forms;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.IO;
using System.Drawing.Imaging;
public struct punto2D
{
private readonly float Xr, Yr; //coordenadas del punto a graficar
public punto2D(double x, double y, double z)
{
this.Xr = (float)(y - x * (Math.Sqrt(2) / 2)); //la transformacion
this.Yr = (float)(z - x * (Math.Sqrt(2) / 2)); //la transformacion
}
public punto2D(punto3D punto)
{
this.Xr = (float)(punto.Y - punto.X * (Math.Sqrt(2) / 2));
this.Yr = (float)(punto.Z - punto.X * (Math.Sqrt(2) / 2));
}
public float xr { get { return Xr; } }
public float yr { get { return Yr; } }
public override string ToString()
{
return string.Format("({0:G3},{1:G3})", xr, yr);
}
}
public struct punto3D
{
private readonly double cx, cy, cz; //coordenadas en 3D de un punto
public punto3D(double x, double y, double z)
{
this.cx = x;
this.cy = y;
this.cz = z;
}
public double X { get { return cx; } }
public double Y { get { return cy; } }
public double Z { get { return cz; } }
public override string ToString()
{
return string.Format("({0:G3},{1:G3},{2:G3})", X, Y, Z);
}
}
class unitario3D
{
int centrox, centroy;
public Graphics grafico;
public Pen lapiz = new Pen(Color.Violet, 0.9f);
public Pen lapiz2 = new Pen(Color.Cyan, 0.9f);
public Font letra = new Font("Arial", 5, FontStyle.Italic, GraphicsUnit.Pixel);
public SolidBrush rrelleno = new SolidBrush(Color.Cyan);
public void dibujarPunto(punto3D punto1, float r)
{
//dibujar cualquier punto 3D - inicio
//punto3D punto1 = new punto3D(xi, yi, zi);//punto inicial
punto2D puntoini = new punto2D(punto1.X, punto1.Y, punto1.Z);//punto inicial a graficar
grafico.DrawEllipse(lapiz, puntoini.xr, puntoini.yr, r, r);
//dibujar cualquier punto 3D - fin
//grafico.DrawString("P(x:" + xi + ",y:" + yi + ",z:" + zi + ")", letra, rrelleno, puntoini.xr, puntoini.yr);
}
public void dibujarPunto(double xi, double yi, double zi, float r)
{
//dibujar cualquier punto 3D - inicio
punto3D punto1 = new punto3D(xi, yi, zi);//punto inicial
punto2D puntoini = new punto2D(punto1.X, punto1.Y, punto1.Z);//punto inicial a graficar
grafico.DrawEllipse(lapiz, puntoini.xr, puntoini.yr, r, r);
//dibujar cualquier punto 3D - fin
//grafico.DrawString("P(x:" + xi + ",y:" + yi + ",z:" + zi + ")", letra, rrelleno, puntoini.xr, puntoini.yr);
}
public void dibujarLinea(punto3D punto1, punto3D punto2)
{
//dibujar cualquier linea 3D - inicio
//punto3D punto1 = new punto3D(xi, yi, zi);//punto inicial
//punto3D punto2 = new punto3D(xf, yf, zf);//punto final
punto2D puntoini = new punto2D(punto1.X, punto1.Y, punto1.Z);//punto inicial a graficar
punto2D puntofin = new punto2D(punto2.X, punto2.Y, punto2.Z);//punto final a graficar
grafico.DrawLine(lapiz, puntoini.xr, puntoini.yr, puntofin.xr, puntofin.yr);//dibujar la linea
//dibujar cualquier linea 3D - fin
//grafico.DrawString("P(x:" + xi + ",y:" + yi + ",z:" + zi + ")", letra, rrelleno, puntoini.xr, puntoini.yr);
//grafico.DrawString("P(x:" + xf + ",y:" + yf + ",z:" + zf + ")", letra, rrelleno, puntofin.xr, puntofin.yr);
}
public void dibujarLinea(double xi, double yi, double zi, double xf, double yf, double zf)
{
//dibujar cualquier linea 3D - inicio
punto3D punto1 = new punto3D(xi, yi, zi);//punto inicial
punto3D punto2 = new punto3D(xf, yf, zf);//punto final
punto2D puntoini = new punto2D(punto1.X, punto1.Y, punto1.Z);//punto inicial a graficar
punto2D puntofin = new punto2D(punto2.X, punto2.Y, punto2.Z);//punto final a graficar
grafico.DrawLine(lapiz, puntoini.xr, puntoini.yr, puntofin.xr, puntofin.yr);//dibujar la linea
//dibujar cualquier linea 3D - fin
//grafico.DrawString("P(x:" + xi + ",y:" + yi + ",z:" + zi + ")", letra, rrelleno, puntoini.xr, puntoini.yr);
//grafico.DrawString("P(x:" + xf + ",y:" + yf + ",z:" + zf + ")", letra, rrelleno, puntofin.xr, puntofin.yr);
}
public void dibujarNubePuntos(List<punto3D> puntos)
{
//dibujar cualquier nube de puntos 3D - inicio
foreach (var p3D in puntos)
{
//punto2D p = new punto2D(p3D.X, p3D.Y, p3D.Z);
//grafico.DrawEllipse(lapiz, p.xr, p.yr, 2, 2);
dibujarPunto(p3D, 1);
}
//dibujar cualquier nube de puntos 3D - fin
}
public void dibujarPlanoCuadrado()
{
// metodo 1
punto3D p1 = new punto3D(100, 100, 150);
punto3D p2 = new punto3D(200, 100, 150);
punto3D p3 = new punto3D(200, 200, 150);
punto3D p4 = new punto3D(100, 200, 150);
dibujarLinea(p1, p2);
dibujarLinea(p2, p3);
dibujarLinea(p3, p4);
dibujarLinea(p4, p1);
// metodo 2
dibujarLinea(p1.X, p1.Y, p1.Z, p2.X, p2.Y, p2.Z);
dibujarLinea(p2.X, p2.Y, p2.Z, p3.X, p3.Y, p3.Z);
dibujarLinea(p3.X, p3.Y, p3.Z, p4.X, p4.Y, p4.Z);
dibujarLinea(p4.X, p4.Y, p4.Z, p1.X, p1.Y, p1.Z);
// dibujar el relleno
punto2D pun1 = new punto2D(p1.X, p1.Y, p1.Z);
punto2D pun2 = new punto2D(p2.X, p2.Y, p2.Z);
punto2D pun3 = new punto2D(p3.X, p3.Y, p3.Z);
punto2D pun4 = new punto2D(p4.X, p4.Y, p4.Z);
// Create solid brush.
SolidBrush blueBrush = new SolidBrush(Color.FromArgb(150, 23, 56, 78));
// Color.FromArgb(127, 23, 56, 78) 127=transparencia, 23=rojo, 56=verde, 78=azul;
// todos los valores comprendidos entre 0 y 255, (0, 255)
// Color.Blue
// Create points that define polygon.
PointF point1 = new PointF(pun1.xr, pun1.yr);
PointF point2 = new PointF(pun2.xr, pun2.yr);
PointF point3 = new PointF(pun3.xr, pun3.yr);
PointF point4 = new PointF(pun4.xr, pun4.yr);
PointF[] curvePoints = { point1, point2, point3, point4 };
// Define fill mode.
FillMode newFillMode = FillMode.Winding; // FillMode.Alternate y FillMode.Winding
// Fill polygon to screen.
grafico.FillPolygon(blueBrush, curvePoints, newFillMode);
}
public void dibujarEjes(PictureBox pbox)
{
int centroX = pbox.Width / 2, centroY = pbox.Height / 2;
Bitmap bmp = new Bitmap(pbox.Width, pbox.Height);
// grafico = pbox.CreateGraphics(); //Desde un picturebox existente para ver solo este basta sin crear el bitmap
grafico = Graphics.FromImage(bmp);
grafico.Clear(Color.Transparent);
grafico.SmoothingMode = SmoothingMode.HighQuality;
grafico.TranslateTransform(centroX, centroY);//grafico.TranslateTransform(centroX, centroY);
grafico.ScaleTransform((float)1, -1);//grafico.ScaleTransform(1, -1);
lapiz.CustomEndCap = new AdjustableArrowCap(2, 3, false);//ponemos punta al vector dibujado
// dibujamos los tres vectores unitarios en 3D
grafico.DrawLine(lapiz, 0, 0, -centroX * (float)(Math.Sqrt(2) / 2), -centroY * (float)(Math.Sqrt(2) / 2));//x
grafico.DrawLine(lapiz, 0, 0, centroX, 0);//y
grafico.DrawLine(lapiz, 0, 0, 0, centroY);//z
lapiz2.CustomEndCap = new AdjustableArrowCap(2, 3, false);
// dibujamos los tres - vectores unitarios en 3D
grafico.DrawLine(lapiz2, 0, 0, centroX * (float)(Math.Sqrt(2) / 2), centroY * (float)(Math.Sqrt(2) / 2));//x
grafico.DrawLine(lapiz2, 0, 0, -centroX, 0);//y
grafico.DrawLine(lapiz2, 0, 0, 0, -centroY);//z
dibujarPunto(25.36, 89.36, 47.23, 1);
dibujarLinea(25.36, 89.36, 47.23, 50.369, 78.26, 45.219);
Random ram = new Random();
List<punto3D> nube = new List<punto3D>();
for (int i = 0; i < 100; i++)
{
nube.Add(new punto3D(25 + ram.Next(0, 100), 35 - ram.Next(0, 100), 0.004 * ram.Next(0, 50)));
}
dibujarNubePuntos(nube);
dibujarPlanoCuadrado();
//for (float i = 0; i < 500; i+=5)
//{
// dibujarLinea(25.36, 89.36, 47.23, 50.369+i, 78.26+i, 45.219+i);
// dibujarPunto(i, i, i, 2);
//}
// dibujar cualquier plano 3D - inicio
//mirar el viedo de jugen en youtube
// dibujar cualquier plano 3D - fin
pbox.Image = bmp;
}
}