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:
|
Openbare Klasse Form1
Privé Veelhoeken als Nieuwe Lijst (van Lijst (van Punt))
Privé KSpoints als Lijst (van Punt) = niets
Privé Sub (ByVal afzender als Voorwerp, ByVal e als System.Windows.Forms.MouseEventArgs) Handvatten PictureBox1_MouseUp PictureBox1.MouseUp
Als IsNothing (KSpoints) toen
KSpoints = Nieuwe Lijst (van Punt)
Polygons.Add (KSpoints)
Eind als
KSpoints.Add (e.Location)
Als KSpoints.Count = 4 toen
Schemerige ptE, ptF als Punt
Schemerige Eenvoudig zoals Van Boole = Waar
Als Geometry.SegmentIntersect (KSpoints (0), KSpoints (3), KSpoints (1), KSpoints (2), ptE, ptF) = Geometry.SegmentIntersection.Point toen
'controleer kruising tussen lijnen door 0 tot 3 en 1 tot 2 worden gevormd die.
Voor Elk PT als Punt in KSpoints
Als niet PT. Evenaart (ptE) Dan
Eenvoudig = Vals
Uitgang voor
Eind als
Daarna
Als niet Eenvoudig toen
'ruil de laatste twee punten
Verduister PT als Punt = KSpoints (3)
KSpoints.RemoveAt (3)
KSpoints.Insert (2, PT)
Eind als
KSpoints = niets
PictureBox1.Refresh ()
Sub van de uitgang
Eind als
Als Geometry.SegmentIntersect (KSpoints (0), KSpoints (1), KSpoints (2), KSpoints (3), ptE, ptF) = Geometry.SegmentIntersection.Point toen
'controleer kruising tussen lijnen door 0 tot 1 en 2 tot 3 worden gevormd die.
Voor Elk PT als Punt in KSpoints
Als niet PT. Evenaart (ptE) Dan
Eenvoudig = Vals
Uitgang voor
Eind als
Daarna
Als niet Eenvoudig toen
'ruil de twee middenpunten
Verduister PT als Punt = KSpoints (2)
KSpoints.RemoveAt (2)
KSpoints.Insert (1, PT)
KSpoints = niets
PictureBox1.Refresh ()
Sub van de uitgang
Eind als
Eind als
KSpoints = niets
PictureBox1.Refresh ()
Anders
PictureBox1.Refresh ()
Eind als
Sub van het eind
Privé SubPictureBox1_Paint (ByVal afzender als Voorwerp, ByVal e als System.Windows.Forms.PaintEventArgs) behandelt PictureBox1.Paint
Statische kleuren () als Kleur = {Color.Red, Color.Green, Color.Blue, Color.Purple}
Voor Elke veelhoek als Lijst (van Punt) in Veelhoeken
Als veelhoek. Telling > 1 toen
Voor I als Geheel = 0 aan veelhoek. Telling - 2
Gebruikend P als Nieuwe Pen (kleuren (I))
e.Graphics.DrawLine (P, veelhoek (I), veelhoek (I + 1))
Het Gebruiken van het eind
Daarna
Als veelhoek. Telling > 2 toen
Het gebruiken van P als Nieuwe Pen (kleuren (veelhoek. Telling - 1))
e.Graphics.DrawLine (P, veelhoek (veelhoek. Telling - 1), veelhoek (0))
Het Gebruiken van het eind
Eind als
Eind als
Voor Elk PT als Punt in veelhoek
Schemerige rc als Nieuwe Rechthoek (PT, Nieuwe Grootte (1, 1))
rc. Blaas op (3, 3)
e.Graphics.FillRectangle (Brushes.Black, rc)
Daarna
Daarna
Sub van het eind
De Klasse van het eind
De openbare Meetkunde van de Klasse
Openbare Enum SegmentIntersection
Niets = 0 de 'Segmenten is parallel en zal nooit snijden
Het punt = 1 de 'Segmenten snijdt fysisch in één punt
ExtrapolatedPoint zou = 2 de 'Segmenten fysisch in één punt snijden als één of beide segmenten werden uitgebreid
Overlappen = 3 de 'Segmenten is parallel en overlapt in een punt of een segment
Eind Enum
Gedeelde Overheidsfunctie SegmentIntersect (_
ByVal A als Punt, ByVal B als Punt, _
ByVal C als Punt, ByVal D als Punt, _
ByRef E als Punt, ByRef F als Punt) als SegmentIntersection
'Als één of allebei binnen overgegaane segmenten werkelijk toen enkel een punt is doe een () berekening PointToSegmentDistance:
Als A.Equals (B) OrElse C.Equals (D) toen
Als A.Equals (B) AndAlso C.Equals (D) toen
Als A.Equals (C) toen
E = A
F = A
Terugkeer Geometry.SegmentIntersection.Point
Anders
Terugkeer Geometry.SegmentIntersection.None
Eind als
ElseIf A.Equals (B) toen
Als Geometry.PointToSegmentDistance (A.X, A.Y, C.X, C.Y, D.X, D.Y) = 0 toen
E = A
F = A
Terugkeer Geometry.SegmentIntersection.Point
Eind als
ElseIf C.Equals (D) toen
Als Geometry.PointToSegmentDistance (C.X, C.Y, A.X, A.Y, B.X, B.Y) = 0 toen
E = C
F = C
Terugkeer Geometry.SegmentIntersection.Point
Eind als
Eind als
Terugkeer Geometry.SegmentIntersection.None
Eind als
'Wij hebben twee daadwerkelijke segmenten… ons laten de berekeningen voor Det1 en Det2 doen:
Schemerige Det1 als Dubbel = (A.Y - C.Y) * (D.X - C.X) - (A.X - C.X) * (D.Y - C.Y)
Schemerige Det2 als Dubbel = (B.X - A.X) * (D.Y - C.Y) - (B.Y - A.Y) * (D.X - C.X)
Als Det2 <> 0 toen 'Niet-parallelle Segmenten (zij snijden of zouden indien uitgebreid snijden)
Schemerige Det3 als Dubbel = (A.Y - C.Y) * (B.X - A.X) - (A.X - C.X) * (B.Y - A.Y)
Schemerige Det4 als Dubbel = (B.X - A.X) * (D.Y - C.Y) - (B.Y - A.Y) * (D.X - C.X)
Schemerig r als Dubbel = Det1/Det2
Schemerig s als Dubbel = Det3/Det4
'Verwerk het kruisingspunt gegevens:
E.X = A.X + R * (B.X - A.X)
E.Y = A.Y + R * (B.Y - A.Y)
F = E
Als (r >= 0 AndAlso r <>= dan niet-Overlapt 0 <> AndAlso s 0 '
Terugkeer Geometry.SegmentIntersection.None
'Anders Overlappend (één punt of een segment)
De 'parallelle segmenten zijn het zelfde
Als (A.Equals (C) AndAlso B.Equals (D)) OrElse (A.Equals (D) AndAlso B.Equals (C)) Dan
E = A
F = B
Terugkeer Geometry.SegmentIntersection.Overlapping
Eind als
De 'parallelle segmentenoverlapping in precies één punt
Als B.Equals (C) OrElse B.Equals (D) toen
E = B
F = B
Terugkeer Geometry.SegmentIntersection.Overlapping
Eind als
Als A.Equals (C) OrElse A.Equals (D) toen
E = A
F = A
Terugkeer Geometry.SegmentIntersection.Overlapping
Eind als
De 'parallelle segmenten overlappen in een segment
Als Geometry.SegmentContainsPoint (A, B, C) AndAlso Geometry.SegmentContainsPoint (C, D, B) toen
E = C
F = B
Terugkeer Geometry.SegmentIntersection.Overlapping
ElseIf Geometry.SegmentContainsPoint (A, B, D) AndAlso Geometry.SegmentContainsPoint (D, C, B) toen
E = D
F = B
Terugkeer Geometry.SegmentIntersection.Overlapping
ElseIf Geometry.SegmentContainsPoint (B, A, C) AndAlso Geometry.SegmentContainsPoint (C, D, A) toen
E = C
F = A
Terugkeer Geometry.SegmentIntersection.Overlapping
ElseIf Geometry.SegmentContainsPoint (B, A, D) AndAlso Geometry.SegmentContainsPoint (D, C, A) toen
E = D
F = A
Terugkeer Geometry.SegmentIntersection.Overlapping
ElseIf Geometry.SegmentContainsPoint (C, D, A) AndAlso Geometry.SegmentContainsPoint (A, B, D) toen
E = A
F = D
Terugkeer Geometry.SegmentIntersection.Overlapping
ElseIf Geometry.SegmentContainsPoint (C, D, B) AndAlso Geometry.SegmentContainsPoint (B, A, D) toen
E = B
F = D
Terugkeer Geometry.SegmentIntersection.Overlapping
ElseIf Geometry.SegmentContainsPoint (D, C, A) AndAlso Geometry.SegmentContainsPoint (A, B, C) toen
E = A
F = C
Terugkeer Geometry.SegmentIntersection.Overlapping
ElseIf Geometry.SegmentContainsPoint (D, C, B) AndAlso Geometry.SegmentContainsPoint (B, A, C) toen
E = B
F = C
Terugkeer Geometry.SegmentIntersection.Overlapping
Eind als
'Één segment bevat volledig andere
Als Geometry.SegmentContainsPoint (A, B, C) AndAlso Geometry.SegmentContainsPoint (A, B, D) toen
E = C
F = D
Terugkeer Geometry.SegmentIntersection.Overlapping
Eind als
Als Geometry.SegmentContainsPoint (C, D, A) AndAlso Geometry.SegmentContainsPoint (C, D, B) toen
E = A
F = B
Terugkeer Geometry.SegmentIntersection.Overlapping
Eind als
De 'segmenten zijn parallel maar niet wat betreft
Terugkeer Geometry.SegmentIntersection.None
Eind als
Eind als
De Functie van het eind
Gedeelde Overheidsfunctie PointToPointDistance (Bijl ByVal zoals Enig, _
ByVal Ay zoals Enig, ByVal Bx zoals Enig, ByVal langs zoals Enig) _
Zoals Enig
'PointToPointDist = SquareRoot ((Bx - Bijl) ^2 + (door - Ay) ^2)
Terugkeer Math.Sqrt ((Bx - Bijl) * (Bx - Bijl) + (door - Ay) * (door - Ay))
De Functie van het eind
Gedeelde Overheidsfunctie PointToSegmentDistance (_
ByVal Px zoals Enig, ByVal Py zoals Enig, _
De Bijl van ByVal zoals Enig, ByVal Ay zoals Enig, _
ByVal Bx zoals Enig, ByVal langs zoals Enig) zoals Enig
Schemerig q zoals Enig
Als (Bijl = Bx) en (Ay = langs) toen
'Binnen overgegaane A en B bepalen een punt, niet een lijn.
'Punt om Afstand te richten
Terugkeer PointToPointDistance (Px, Py, Bijl, Ay)
Anders
De 'afstand is de lengte van de lijn nodig om te verbinden het punt met
'(segment) dusdanig dat de twee lijnen loodrecht zouden zijn.
'q is de de parameters bepaalde van waarde nodig om aan de kruising te krijgen
q = ((Px - Bijl) * (Bx - Bijl) + (Py - Ay) * (door - Ay)) /_
((Bx - Bijl) * (Bx - Bijl) + (door - Ay) * (door - Ay))
'Grens q aan 0 <> 1 toen q = 1
'Afstand
Terugkeer PointToPointDistance (_
Px, Py, (1 - q) * Bijl + q * Bx, (1 - q) * Ay + q * langs)
Eind als
De Functie van het eind
Gedeelde Overheidsfunctie SegmentContainsPoint (_
ByVal A als Punt, ByVal B als Punt, ByVal C als Punt) zoals Van Boole
'Twee Segmenten van ab zijn en CD reeds bepaald om te hebben
'zelfde helling en dat zij overlappen.
'Ab is het segment, en C is het punt in kwestie.
'Als ab waar C dan terugkeer bevat, keer anders vals terug
Als C.Equals (A) of C.Equals (B) toen
Ware terugkeer
ElseIf A.X = B.X toen 'Project aan de y-As voor verticale lijnen
Schemerige minY als Geheel = Math.Min (A.Y, B.Y)
Schemerige maxY als Geheel = Math.Max (A.Y, B.Y)
Als minY <>
|