【Geometry】Compute Coordinates of Pentagram Vertexes

Dependency
kotlin 复制代码
api("io.github.hellogoogle2000:kotlin-commons:+")
Sources
kotlin 复制代码
import x.kotlin.commons.serialize.JSON.toJson
import kotlin.math.PI
import kotlin.math.cos
import kotlin.math.sin

data class Point(var x: Double = 0.0, var y: Double = 0.0)

fun main() {

    // basic info
    val cx = 100.0
    val cy = 100.0
    val R = 100.0
    val radiusRatio = sin(Math.toRadians(18.0)) / sin(Math.toRadians(126.0))
    val r = R * radiusRatio
    val degree = 2 * PI / 5

    // compute points
    val p1 = Point()
    val p2 = Point()
    val p3 = Point()
    val p4 = Point()
    val p5 = Point()
    val p6 = Point()
    val p7 = Point()
    val p8 = Point()
    val p9 = Point()
    val p10 = Point()
    p1.x = cx
    p1.y = cy - R
    p2.x = cx + r * sin(degree * 0.5)
    p2.y = cy - r * cos(degree * 0.5)
    p3.x = cx + R * sin(degree)
    p3.y = cy - R * cos(degree)
    p4.x = cx + r * cos(degree * 1.5 - PI / 2)
    p4.y = cy + r * sin(degree * 1.5 - PI / 2)
    p5.x = cx + R * cos(degree * 2 - PI / 2)
    p5.y = cy + R * sin(degree * 2 - PI / 2)
    p6.x = cx
    p6.y = cy + r
    p7.x = cx - R * cos(degree * 2 - PI / 2)
    p7.y = cy + R * sin(degree * 2 - PI / 2)
    p8.x = cx - r * cos(degree * 1.5 - PI / 2)
    p8.y = cy + r * sin(degree * 1.5 - PI / 2)
    p9.x = cx - R * sin(degree)
    p9.y = cy - R * cos(degree)
    p10.x = cx - r * sin(degree * 0.5)
    p10.y = cy - r * cos(degree * 0.5)

    // print points
    val points = listOf(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10)
    println(points.toJson())

    // print size
    val width = (p3.x - p9.x).toFloat()
    val height = (p7.y - p1.y).toFloat()
    val ratio = height / width
    println("cx=$cx cy=$cy r=$r width=$width height=$height ratio=$ratio")

    // print sides
    val sides = mutableListOf<List<FloatArray>>()
    for (i in 0 until points.size) {
        val first = points[i]
        val second = points[if (i == points.size - 1) 0 else i + 1]
        val pointPair = listOf(
            floatArrayOf(first.x.toFloat(), first.y.toFloat()),
            floatArrayOf(second.x.toFloat(), second.y.toFloat())
        )
        sides.add(pointPair)
    }
    print(sides.toJson())
}
相关推荐
Kapaseker1 天前
三分钟搞懂 Kotlin Flow 中的背压
android·kotlin
QING6181 天前
Jetpack Compose 中的 ViewModel 作用域管理 —— 新手指南
android·kotlin·android jetpack
KotlinKUG贵州2 天前
Kotlin/Ktor 实践:利用 MCP 从零打造 AI Agent 服务端指南
kotlin·agent·mcp
喜熊的Btm2 天前
探索 Kotlin 的不可变集合库
kotlin·android jetpack
モンキー・D・小菜鸡儿3 天前
Android 中 StateFlow 的使用
android·kotlin
我又来搬代码了3 天前
【Android】【Compose】Compose知识点复习(一)
android·前端·kotlin·android studio
hnlgzb4 天前
好像kotlin class和kotlin file都可以是activity?
android·开发语言·kotlin
zhangphil4 天前
Kotlin超时withTimeout超时与ensureActive()取消协程任务执行
kotlin
hnlgzb4 天前
安卓app开发,如何快速上手kotlin和compose的开发?
android·开发语言·kotlin