(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:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
288:
289:
290:
|
Społeczeństwo Klasowy Form1
Intymny Wielobok Nowy Lista (Lista (Punkt))
Intymny KSpoints Lista (Punkt) = Nic
Intymny Okręt podwodny PictureBox1_MouseUp (ByVal nadawca Jako Przedmiot, ByVal e Jako System.Windows.Forms.MouseEventArgs) Obchodzić się PictureBox1.MouseUp
Jeżeli IsNothing (KSpoints) Wtedy
KSpoints = Nowy Lista (Punkt)
Polygons.Add (KSpoints)
Kończyć Jeżeli
KSpoints.Add (e.Location)
Jeżeli KSpoints.Count = 4 Wtedy
Ciemnawy ptE, ptF Punkt
Ciemnawy Prosty Boolowski = Prawdziwy
Jeżeli Geometry.SegmentIntersect (KSpoints ((0)), KSpoints (3), KSpoints (1), KSpoints (2), ptE, ptF) = Geometry.SegmentIntersection.Point Wtedy
'sprawdzać dla skrzyżowanie między linia tworzyć (0) 3 i (1) 2.
Dla KSpoints pt Punkt W KSpoints
Jeśli nie pt. Równy (ptE) Wtedy
Prosty = Fałszywy
Wyjście Dla
Kończyć Jeżeli
Następnie
Jeśli nie Prosty Wtedy
'zamieniać the ostatni dwa punkt
Ćmić pt Jako Punkt = KSpoints (3)
KSpoints.RemoveAt (3)
KSpoints.Insert (2, pt)
Kończyć Jeżeli
KSpoints = Nic
PictureBox1.Refresh ()
Wyjście Okręt podwodny
Kończyć Jeżeli
Jeżeli Geometry.SegmentIntersect (KSpoints ((0)), KSpoints (1), KSpoints (2), KSpoints (3), ptE, ptF) = Geometry.SegmentIntersection.Point Wtedy
'sprawdzać dla skrzyżowanie między linia tworzyć (0) (1) i 2 3.
Dla KSpoints pt Punkt W KSpoints
Jeśli nie pt. Równy (ptE) Wtedy
Prosty = Fałszywy
Wyjście Dla
Kończyć Jeżeli
Następnie
Jeśli nie Prosty Wtedy
'zamieniać the dwa środkowy punkt
Ćmić pt Jako Punkt = KSpoints (2)
KSpoints.RemoveAt (2)
KSpoints.Insert ((1), pt)
KSpoints = Nic
PictureBox1.Refresh ()
Wyjście Okręt podwodny
Kończyć Jeżeli
Kończyć Jeżeli
KSpoints = Nic
PictureBox1.Refresh ()
Inny
PictureBox1.Refresh ()
Kończyć Jeżeli
Kończyć Okręt podwodny
Intymny Okręt podwodny PictureBox1_Paint (ByVal nadawca Jako Przedmiot, ByVal e Jako System.Windows.Forms.PaintEventArgs) Obchodzić się PictureBox1.Paint
Statyczny kolor () Jako Kolor = {Color.Red, Color.Green, Color.Blue, Color.Purple}
Dla Wielobok wielobok Lista (Punkt) W Wielobok
Jeżeli wielobok. Obliczenie > (1) Wtedy
Dla i Jako Integer = (0) Wielobok. Obliczenie - 2
Using P Jako Nowy Pióro (kolor (i))
e.Graphics.DrawLine (P, wielobok (i), wielobok (i + 1))
Końcówka Using
Następnie
Jeżeli wielobok. Obliczenie > 2 Wtedy
Using P Jako Nowy Pióro (kolor (wielobok. Obliczenie - 1))
e.Graphics.DrawLine (P, wielobok (wielobok. Obliczenie - 1), wielobok ((0)))
Końcówka Using
Kończyć Jeżeli
Kończyć Jeżeli
Dla Wielobok pt Punkt W wielobok
Ciemnawy rc Jako Nowy Prostokąt (pt, Nowy Rozmiar ((1), 1))
rc. Nadymać (3, 3)
e.Graphics.FillRectangle (Brushes.Black, rc)
Następnie
Następnie
Końcówka Okręt podwodny
Końcówka Klasa
Społeczeństwo Klasowy Geometria
Jawny Enum SegmentIntersection
Nikt = (0) 'The segment być paralela i nigdy przecinać
Punkt = (1) 'The segment fizycznie przecinać w jeden punkt
ExtrapolatedPoint = 2 'The segment fizycznie przecinać w jeden punkt jeżeli jeden lub oba segment być rozszerzony
Pokrywać się = 3 'The segment być paralela i nasunięcie w punkt lub segment
Końcówka Enum
Społeczeństwo Podzielony Funkcja SegmentIntersect (_
ByVal A Punkt, ByVal B Jako Punkt, _
ByVal C Punkt, ByVal D Jako Punkt, _
ByRef E Jako Punkt, ByRef F Jako Punkt) Jako SegmentIntersection
'Jeżeli jeden lub jeden the segment przechodzić wewnątrz być właściwie punkt wtedy właśnie robić PointToSegmentDistance () obliczenie:
Jeżeli A.Equals (B) OrElse C.Equals (D) Wtedy
Jeżeli A.Equals (B) AndAlso C.Equals (D) Wtedy
Jeżeli A.Equals (C) Wtedy
E = A
F = A
Powrotny Geometry.SegmentIntersection.Point
Inny
Powrotny Geometry.SegmentIntersection.None
Kończyć Jeżeli
ElseIf A.Equals (B) Wtedy
Jeżeli Geometry.PointToSegmentDistance (A.X, A.Y, C.X, C.Y, D.X, D.Y) = (0) Wtedy
E = A
F = A
Powrotny Geometry.SegmentIntersection.Point
Kończyć Jeżeli
ElseIf C.Equals (D) Wtedy
Jeżeli Geometry.PointToSegmentDistance (C.X, C.Y, A.X, A.Y, B.X, B.Y) = (0) Wtedy
E = C
F = C
Powrotny Geometry.SegmentIntersection.Point
Kończyć Jeżeli
Kończyć Jeżeli
Wracać Geometry.SegmentIntersection.None
Kończyć Jeżeli
'My mieć dwa faktyczny segment… pozwalać the obliczenie dla Det1 i Det2:
Ciemnawy Det1 Jako Kopia = (A.Y - C.Y) * (D.X - C.X) - (A.X - C.X) * (D.Y - C.Y)
Ciemnawy Det2 Jako Kopia = (B.X - A.X) * (D.Y - C.Y) - (B.Y - A.Y) * (D.X - C.X)
Jeżeli Det2 <> (0) Wtedy 'Wtedy Segment (przecinać lub przecinać jeżeli rozszerzony)
Ciemnawy Det3 Jako Kopia = (A.Y - C.Y) * (B.X - A.X) - (A.X - C.X) * (B.Y - A.Y)
Ciemnawy Det4 Jako Kopia = (B.X - A.X) * (D.Y - C.Y) - (B.Y - A.Y) * (D.X - C.X)
Ciemnawy r Jako Kopia = Det1/Det2
Ciemnawy s Jako Kopia = Det3/Det4
'Obliczać the skrzyżowanie punkt:
E.X = A.X + r * (B.X - A.X)
E.Y = A.Y + r * (B.Y - A.Y)
F = E
Jeżeli (r >= (0) AndAlso r <>= (0) AndAlso s <> (0) Wtedy 'Wtedy
Powrotny Geometry.SegmentIntersection.None
Inny '(Jeden punkt lub segment)
'The równoległy segment być the segment
Jeżeli (A.Equals (C) AndAlso B.Equals (D)) OrElse (A.Equals (D) AndAlso B.Equals (C)) Wtedy
E = A
F = B
Powrotny Geometry.SegmentIntersection.Overlapping
Kończyć Jeżeli
'The paralela segment pokrywać się w dokładnie jeden punkt
Jeżeli B.Equals (C) OrElse B.Equals (D) Wtedy
E = B
F = B
Powrotny Geometry.SegmentIntersection.Overlapping
Kończyć Jeżeli
Jeżeli A.Equals (C) OrElse A.Equals (D) Wtedy
E = A
F = A
Powrotny Geometry.SegmentIntersection.Overlapping
Kończyć Jeżeli
'The paralela segment pokrywać się w segment
Jeżeli Geometry.SegmentContainsPoint (A, B, C) AndAlso Geometry.SegmentContainsPoint (C, D, B) Wtedy
E = C
F = B
Powrotny Geometry.SegmentIntersection.Overlapping
ElseIf Geometry.SegmentContainsPoint (A, B, D) AndAlso Geometry.SegmentContainsPoint (D, C, B) Wtedy
E = D
F = B
Powrotny Geometry.SegmentIntersection.Overlapping
ElseIf Geometry.SegmentContainsPoint (B, A, C) AndAlso Geometry.SegmentContainsPoint (C, D, A) Wtedy
E = C
F = A
Powrotny Geometry.SegmentIntersection.Overlapping
ElseIf Geometry.SegmentContainsPoint (B, A, D) AndAlso Geometry.SegmentContainsPoint (D, C, A) Wtedy
E = D
F = A
Powrotny Geometry.SegmentIntersection.Overlapping
ElseIf Geometry.SegmentContainsPoint (C, D, A) AndAlso Geometry.SegmentContainsPoint (A, B, D) Wtedy
E = A
F = D
Powrotny Geometry.SegmentIntersection.Overlapping
ElseIf Geometry.SegmentContainsPoint (C, D, B) AndAlso Geometry.SegmentContainsPoint (B, A, D) Wtedy
E = B
F = D
Powrotny Geometry.SegmentIntersection.Overlapping
ElseIf Geometry.SegmentContainsPoint (D, C, A) AndAlso Geometry.SegmentContainsPoint (A, B, C) Wtedy
E = A
F = C
Powrotny Geometry.SegmentIntersection.Overlapping
ElseIf Geometry.SegmentContainsPoint (D, C, B) AndAlso Geometry.SegmentContainsPoint (B, A, C) Wtedy
E = B
F = C
Powrotny Geometry.SegmentIntersection.Overlapping
Kończyć Jeżeli
'Jeden segment całkowicie zawierać the segment
Jeżeli Geometry.SegmentContainsPoint (A, B, C) AndAlso Geometry.SegmentContainsPoint (A, B, D) Wtedy
E = C
F = D
Powrotny Geometry.SegmentIntersection.Overlapping
Kończyć Jeżeli
Jeżeli Geometry.SegmentContainsPoint (C, D, A) AndAlso Geometry.SegmentContainsPoint (C, D, B) Wtedy
E = A
F = B
Powrotny Geometry.SegmentIntersection.Overlapping
Kończyć Jeżeli
'Segment być równoległy ale dotykać
Powrotny Geometry.SegmentIntersection.None
Kończyć Jeżeli
Kończyć Jeżeli
Kończyć Funkcja
Społeczeństwo Podzielony Funkcja PointToPointDistance (ByVal Ax Pojedynczy, _
ByVal Ay Pojedynczy, ByVal Bx Pojedynczy, ByVal Obok Pojedynczy) _
Pojedynczy
'PointToPointDist = SquareRoot ((Bx - Ax) ^2 + (- Ay) ^2)
Powrotny Math.Sqrt ((Bx - Ax) * (Bx - Ax) + (- Ay) * (- Ay))
Końcówka Funkcja
Społeczeństwo Podzielony Funkcja PointToSegmentDistance (_
ByVal Px Pojedynczy, ByVal Py Pojedynczy, _
ByVal Ax Pojedynczy, ByVal Ay Pojedynczy, _
ByVal Bx Pojedynczy, ByVal Obok Pojedynczy) Pojedynczy
Ciemnawy q Pojedynczy
Jeżeli (Ax = Bx) I (Ay = Obok) Wtedy
'A i B przechodzić wewnątrz definiować punkt, nie linia.
'Punkt Punkt Odległość
Powrotny PointToPointDistance (Px, Py, Ax, Ay)
Inny
'Odległość być the długość the linia potrzebować the punkt
'the (segment) linia że the dwa linia być pionowy.
'q być the skrzyżowanie wartość potrzebować the skrzyżowanie
q = ((Px - Ax) * (Bx - Ax) + (Py - Ay) * (- Ay)) /_
((Bx - Ax) * (Bx - Ax) + (- Ay) * (- Ay))
'Ograniczać q (0) <> (1) Wtedy q = (1)
'Odległość
Powrotny PointToPointDistance (_
Px, Py, ((1) - q) * Ax + q * Bx, ((1) - q) * Ay + q * Obok)
Kończyć Jeżeli
Kończyć Funkcja
Społeczeństwo Podzielony Funkcja SegmentContainsPoint (_
ByVal A Punkt, ByVal B Jako Punkt, ByVal C Punkt) Boolowski
'Dwa Segment AB i CD już ustalać the
'pokrywać się slope i pokrywać się pokrywać się.
'AB być the segment, i C być the punkt omawiany.
'Jeżeli AB zawierać C then powrót prawdziwy, inaczej powrotny fałszywy
Jeżeli C.Equals (A) Lub C.Equals (B) Wtedy
Powrotny Prawdziwy
ElseIf A.X = B.X Wtedy 'Projektować the Y-Axis dla pionowo linia
Ciemnawy minY Jako Integer = Math.Min (A.Y, B.Y)
Ciemnawy maxY Jako Integer = Math.Max (A.Y, B.Y)
Jeżeli minY <>
|