Étant donné 4 points sur les plans 2D A, B, C, D
, calculez l'aire de la région d'intersection des triangles OAB
et OCD
, où O
est le centre du plan, en ayant les coordonnées (0, 0)
.
Les algorithmes qui s'exécutent en complexité temporelle constante (en termes d'opérations arithmétiques) sont encouragés, mais pas forcés.
Règles
- Chaque point est représenté par deux nombres réels, dénote leurs coordonnées X et Y.
- Facultativement, si votre langage de programmation (ou une bibliothèque de votre langage de programmation) a un type intégré
Point
ou équivalent, il est autorisé à prendre unPoint
objet en entrée.
- Facultativement, si votre langage de programmation (ou une bibliothèque de votre langage de programmation) a un type intégré
- L'entrée est donnée en 4 points, dans les formats, y compris mais sans s'y limiter:
- Une liste de 8 coordonnées.
- Une liste de 4 points, chaque point peut être représenté dans n'importe quel format pratique.
- Deux listes de 2 points.
- etc.
- Vous ne pouvez pas assumer un ordre particulier des points (ordre anti-horaire ou horaire)
- Vous ne pouvez pas supposer que le point
O
est passé en entrée. En d'autres termes, le programme ne doit pas prendre et utiliser une entrée étrangère. - Vous ne pouvez pas supposer que tous les points sont différents. En d'autres termes, les triangles peuvent être dégénérés. Vous devez également gérer ce cas (voir les cas de test ci-dessous)
- La différence absolue ou relative doit être inférieure à celle des exemples de cas de test ci-dessous.
10-3
Critères gagnants
C'est le code-golf , la réponse la plus courte en octets gagnant!
Exemples de cas de test
Ax Ay Bx By Cx Cy Dx Dy area
5 1 1 3 -1 0 0 -1 0
5 1 1 3 -1 0 0 0 0
5 1 1 3 0 0 0 0 0
5 1 1 3 3 4 4 -3 4.50418
5 1 1 3 1 2 2 1 1.5
5 1 1 3 -2 5 4 -2 1.74829
5 1 1 3 -2 5 5 4 2.96154
5 1 1 3 3 5 5 4 1.88462
5 1 1 3 3 5 3 1 3.92308
5 1 1 3 3 5 4 -1 5.26619
5 1 1 3 5 1 4 -1 0
5 1 1 3 5 1 1 3 7
1 3 1 3 5 1 1 3 0
1 3 1 3 1 3 1 3 0
4 8 4 -1 -2 6 -2 -3 0
1.2 3.4 -0.3 4.2 5 7.6 -1.1 2.4 2.6210759326188535
3.1 0.6 0.1 7.2 5.2 0.7 0.9 8 9.018496993987977
Si quelqu'un le souhaite, voici les sorties du premier groupe de cas de test sous leur forme exacte:
0
0
0
46375/10296
3/2
1792/1025
77/26
49/26
51/13
23345/4433
0
7
0
0
0
Image d'illustration pour le cas de test 5 1 1 3 3 4 4 -3
(la zone du quadrilatère vert est la sortie attendue):
[ ]
Réponses:
Wolfram Language (Mathematica) , 55 octets
Essayez-le en ligne!
Rasé quelques octets de la réponse triviale.
Le remplacement
Area
parDiscretizeRegion
affichera l'intersection.Soit dit en passant, cela fonctionnera avec tous les simplexes, pas seulement les triangles.
-1 octet grâce à JungHwan Min
La suggestion de @ user202729 a ajouté 4 octets, mais elle donne 0 pour les triangles dégénérés
la source
{{0,0}}
to{0{,}}
(cela fonctionne parce que l'expression est évaluée à{Times[0, {Null, Null}]}
)Python 2 + PIL,
341318313284270 octetsRemerciements particuliers à Dennis qui a rapidement ajouté PIL sur TIO
-23 octets grâce à M. Xcoder
Essayez-le en ligne! ou Essayez tous les cas de test
Pour calculer la différence, dessinez littéralement les triangles et vérifiez la quantité de pixels qui sont peints dans les deux images.
Cette méthode a inséré une erreur d'arrondi, qui est adoucie en augmentant la taille de l'image.
Explication
la source