Advertisement
StefanBashkir

Untitled

Dec 22nd, 2013
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.45 KB | None | 0 0
  1. local ply = Instance.new("WedgePart")
  2. ply.formFactor = "Custom"
  3. ply.TopSurface = 0
  4. ply.BottomSurface = 0
  5. ply.Anchored = true
  6. ply.Size = Vector3.new(0.2,7,7)
  7.  
  8. local msh = Instance.new("SpecialMesh")
  9. msh.MeshType = 2
  10. msh.Parent = ply
  11.  
  12. function ParaD(a, b, c)
  13.     local dot = (b-a).x*(c-a).x + (b-a).y*(c-a).y + (b-a).z*(c-a).z
  14.     return dot / (a-b).magnitude
  15. end
  16.  
  17. function PerpD(a, b, c)
  18.     local par = ParaD(a, b, c)
  19.     return math.sqrt((c-a).magnitude^2 - par^2)
  20. end
  21.  
  22. local _P0, _P1 = nil, nil
  23.  
  24. function draw(vec1, vec2, vec3)--, id)
  25.     local A, B, C = nil, nil, nil
  26.     local p0, p1 = ply:clone(), ply:clone()
  27.     local rmodel = Instance.new("Model")
  28.     _P0 = p0
  29.     _P1 = p1
  30.     local s1 = (vec1 - vec2).magnitude
  31.             s2 = (vec2 - vec3).magnitude
  32.             s3 = (vec3 - vec1).magnitude
  33.     local smax = math.max(s1, s2, s3)
  34.     if (vec1 - vec2).magnitude == smax then
  35.         A = vec1
  36.         B = vec2
  37.         C = vec3
  38.     elseif (vec2 - vec3).magnitude == smax then
  39.         A = vec2
  40.         B = vec3
  41.         C = vec1   
  42.     elseif (vec3 - vec1).magnitude == smax then
  43.         A = vec3
  44.         B = vec1
  45.         C = vec2   
  46.     end
  47.     local perp = PerpD(A, B, C)
  48.     local para = ParaD(A, B, C)
  49.     local dif_para = (A-B).magnitude - para
  50.     local ambig = false
  51.     p0.Mesh.Scale = Vector3.new(0.1, 1,1)
  52.     p0.Size = Vector3.new(.2, perp, para)
  53.     p0.CFrame = CFrame.new(B, A)
  54.     local Top_Look = (p0.CFrame * CFrame.Angles(math.pi/2, 0, 0)).lookVector
  55.     local Mid_Point = A + CFrame.new(A, B).lookVector * para
  56.     local Needed_Look = CFrame.new(Mid_Point, C).lookVector
  57.     local dot = (Top_Look.x * Needed_Look.x) + (Top_Look.y * Needed_Look.y) + (Top_Look.z * Needed_Look.z)
  58.     p0.CFrame = p0.CFrame * CFrame.Angles(0, 0, math.acos(dot))
  59.     if ((p0.CFrame * CFrame.Angles(math.pi/2, 0, 0)).lookVector - Needed_Look).magnitude > 0.01 then
  60.         p0.CFrame = p0.CFrame * CFrame.Angles(0, 0, -2*math.acos(dot))
  61.         ambig = true
  62.     end
  63.     p0.CFrame = p0.CFrame * CFrame.new(0, perp/2, -(dif_para + para/2))
  64.     p0.Parent = rmodel
  65.     p0.Name = "P0"
  66.     p1.Mesh.Scale = Vector3.new(0, 1,1)
  67.     p1.Size = Vector3.new(.2, perp, dif_para)
  68.     p1.CFrame = CFrame.new(B, A)  * CFrame.Angles(0, 0, math.acos(dot)) * CFrame.Angles(0, math.pi, 0)
  69.     if ((p1.CFrame * CFrame.Angles(math.pi/2, 0, 0)).lookVector - Needed_Look).magnitude > 0.01 then
  70.         p1.CFrame = p1.CFrame * CFrame.Angles(0, 0, 2*math.acos(dot))
  71.         ambig = true
  72.     end
  73.     p1.CFrame = p1.CFrame * CFrame.new(0, perp/2, dif_para/2)
  74.     p1.Parent = rmodel
  75.     p1.Name = "P1"
  76.     table.insert(triangles, p0)
  77.     table.insert(triangles, p1)
  78.     return rmodel
  79. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement